Since no replies were generated, I've figured out the problem. Here's a smaller example, that was not exactly what happened, but demonstrates the concept.
Objects: A depends on B depends on C
C for some stupid reason includes A.
Now the code in question includes B.
The include of B begins expanding the include of C which begins expanding A, which begins expanding B. Since B has already been include (using require_once), it quits. Now B can't define itself in the dependency hierarchy and the whole thing crashes.
To prevent such include deadlocks, first include things in reverse order. That is in the above ALWAYS start at the leaf nodes and work upward.
So you would include C first, C would include B, which would include A and everything would be cool.
Includes should be kept to a minimum, and only what's absolutely necessary.
If you have an actual circular dependency loop in your class hierarchy, it needs reworking because you'll never get it to work.