By this time next year I'd like to be able to say I have a solid grasp of the material one would customarily learn by going to grad school for computer science.
I work in OO Python professionally.
I know some basic automata theory and can sketch proofs of simple results like the pumping lemma.
I can understand and/or construct a simple grammar.
I know what a linked list, a binary tree, and a hashtable are, I know their big-O characteristics, and I'd be able to implement them in C if asked.
I've read SICP, and can easily manipulate recursion, closures, etc. I know how to adjust a function to ensure it takes advantage of tail-call optimization. I know how to "fake" OO using closures.
I can comfortably implement simple functions in Scheme or Haskell.
I've never played with macros or continuations. I know what a monad is, and have had cause to use them a couple times, but I'm not sure I know what the big deal is yet.
What don't I know?
It sounds to me like you have a very good grasp of a good percentage of the topics covered in an undergraduate CS program. You didn't mention anything about electronic circuits, computer architecture, assembly language, or principles of operating systems. We cover those in our program (I'm a CS prof). You also didn't mention anything about software engineering standards & practices, although as a professional developer I would imagine you have a fair amount of experience in those areas.
As for graduate school, there is no standard set of things one learns there. Rather, graduate school is where you specialize. To get a Ph.D., you would be required to make some original research contribution to the field. So it's less about learning some particular curricular material, and more about getting to the point where you can advance the field, and then doing so.