So, here's a comparison of some renderings with various hemicubes. From left to right, they are: 128x128, 300x300, 128x128 with 6X antialiasing.



See how much nicer looking the one at 300 looks? The gradients are a lot smoother and you don't get the weird bar effect. The 128x128 with antialiasing looks almost as good and doesn't take much more time than the 128x128 without antialiasing on modern hardware. Like I said, antialiasing can't be used on subsequent passes, but since the light is more diffuse to begin with at this point, it might not be noticable anyway. I guess we'll have to wait and see.
Going back to the question I posed earlier: my original "project roadmap" says that I should work on implementing bouncing now. But I'm considering trying to rework the project a bit and try implementing more of it on the graphics card in hopes of improving speed. If you have feelings on the subject, please feel free to weigh in. It might be a while until I work on it again (don't really know).
A random thought:
The way the current code is, I can't use SSE instructions (for those of you unfamiliar, these are similar to MMX processor instructions, but for floating point math instead of integer math) for the first pass, but I realized yesterday that I COULD use them for subsequent passes. This may well mean subsequent passes get considerably faster.
Vermeer, I'll definitely be playing with your scenes at some point, especially once I start playing with vertex normals (which aren't currently implemented, but will be at some point... they'll just slow things down now anyway, which doesn't help my testing and development!).