Scott he's not using the form's graphics object because he needs to draw in front of them so he's drawing to the screen.
back to the OP.
I messed with you example the object not set to an instance of an object error is something trivial happened when moving the code probably, wouldn't worry about that.
I couldn't seem to force an out of memory exception though. just didn't' happen. and I messed with it a lot.
as for all your flicker, you will need to user draw all the user controls that are being refreshed and double buffer them. but that's not your problem at hand.
1 thing you have the using block and still call G.Dispose, not necessary but shouldn't cause a problem.
another when you call refresh in the mouse move it is actually refreshing the entire control and all the child controls it contains. it could be any of the child controls causing the problem when they are painted. as many of these controls appear to be custom drawn you might want to go back and check all of their paint events to see if the leak is there.
I hope this helps. seems you are doing a great job so far.