Tracked down the problem I was having.
Having not programming in a no-pointer language for a while it took my a while to find it and make the mistake in the first place.
I had my rectangles filling themselves from the same area of the same block.
They were therefore both pointing to tiles in the source block.
Unfortunaly in the tile data structure I placed a translation matrix :(
So each time the copy rect was called they changed the translation matrix.
So they were plotted in the same place every time.
This is unlikely to happen in the game but it could if I messed enough with the setup, its lucky I caught it now.
Shouldn't be too hard to fix now I've found it!