Yes, my to-be-blended surfaces came out of a ring buffer. Yes, there was the bug. It just returned the same surface over and over again - so I successfully blitted the same screens on top of each other. With 50% opacity. A graphical effect commonly known as "resource-wasting transparency-cancelling blending" (not a very catchy name, I know).
So, the morale of the story is: check your ring buffer implementations first.
Uh... or something like that, anyway.