just off the top of my head, I'm assuming you have references to all the windows etc.. maybe creating a dirty rectange system for updating, and only force an update when needed via this system. It's a nice way of controlling your redraws, in a gui sort of fashion!
With regards your cheap fix - drawing to an surface and then showing that, well it worked for me ...
I created an GraphicsStream and got the backbuffer then saved this to the stream. For reference to this stream, I then used the TectureLoader class to create an texture for me to display, instead of complete redraws. I would be more then happy to forward this code to you as an example,
many thanks - Neil