For info purposes, I've managed to fix this.
When I needed to render in the background, I was recreating my view and its subviews programmatically but the main view was not immediately calling drawRect when I called setNeedsDisplay...(of course!). So my background thread sometimes ran before the main view had rendered.
By forcing the view to render itself (with the code below) immediately, I could 'synchronise' everything and get the correct thumbnails.
CALayer *layer = self.layer;
[layer setNeedsDisplay];
[layer displayIfNeeded];
Hope this helps anyone else.