Why does g1 redraw the image in the whole window, while g2 only draws the new portion, even if I call g2.Clear() before drawing? I can't understand this point, You are drawing full form in both cases. So both should draw the whole form, perhaps you had this behavior in a different code
Why, with either Graphics object, is the image only redrawn when the window increases in size, and not when it is made smaller? Because you should call Invalidate() in the Form.Resize event to initiate the redraw
If PaintEventArgs.Graphics can (or should) not be used for drawing, what is it used for? I would imagine it just prevents you from having to create a new Graphics instance if the form doesn't need to be redrawn; is there more to it that I'm missing? They are different, CreateGraphics is a temporary object that should be disposed immediately after use (or used within using block), Its used for simple tasks that does not require drawing, Such as MeasureString or to get Context information. For Drawing you always should use PaintEventArgs.Graphics. A good scenario where the difference will be obvious is when using double buffering, If you get the Graphics object using CreateGraphics you will get the Graphics object for the control, While getting it from PaintEventArgs will get you the buffering Bitmap.