Thanks to everyone that gave it a try

I guess I should explain about the lights - regular GL lighting isn't being used (well, one ambient is but that doesn't count) it's all done by building the light intensity up in the alpha buffer, before modulating this by the geometry.
Since this requires (per light!):
- Clear alpha buffer
- Load alpha buffer with light intensity
- Mask off shadow hulls and fins
- Modulate with scene geometry
Obviously this means that more lights need vastly more activity going on in the framebuffer

And i've already reduced the geometry rendered per pass by limiting it to the objects within the light bounds.
I think that using the scissor test could gain me some speed by limiting the screen update to the lights bounds - how much fill rate this saves is another matter though.
Note that the test level is a pretty bad case - i'm profiling with the entire level in view, and most of the lights overlap by quite a bit.
Endolf: Thanks for the trace, it seems like the texture files arn't being found (no big deal really, I broke texturing while optimising). The textures loaded are controlled by a text file in ./Data/Textures/TestSet.txt - I stripped out a lot of the entries to reduce the redundant textures in the zip. You can either check the txt file and fix the entries (should be something like:
Detail Detail.png
on every line. Perhaps I missed the file extensions on the second collumn?
Or you can just delete the entire contents of the file, textures arn't needed anyway. Did the app continue after these exceptions (should have done!) or did it die a death?