It doesn't make much difference whether you override OnPaint or listen for the Paint event, usually. The OnPaint function in the base class will do whatever default painting the control has, then it raises the Paint event. If you override OnPaint, the Paint event will never be raised. This is usually only an issue if you want people to be able to listen for your Paint event.
You can use .Refresh or .Invalidate to make your control redraw. I prefer Invalidate, because it doesn't force an immediate redraw, it just marks the surface as invalid so when windows next gets round to it, it will initiate the redraw itself. Also, you can pass a region or rectangle to Invalidate, and only that bit of the surface will be redrawn. This can increase drawing speed.