Turns out the problem I was seeing on OpenGLContext was actually a known bug (I think there's even a patch on SourceForge to fix it for wxPython, I just hadn't realised it could show up under PyGame and GLUT (I don't have wxPython built on this machine at the moment).
Basically, the buffer was being swapped before drawing to the buffer had finished. IIRC SwapBuffers should be doing a flush before itself, but I guess not... sigh... so we'll just force the issue for all of the contexts.
This is basically a non-deterministic problem, which is why I couldn't find a code-based reason for the change, it's all just timing, vageries of memory allocation and the like. Nothing to do with what's being done in the rendering loop itself.
Have 4 hours before the party this evening, may get OpenGLContext 2.0.0 final out this weekend!