This question already has an answer here:
What is the difference between UserControl and CustomControl in C# using WindowsForm?
There are custom and user controls for both windows applications and web applications. The windows application controls have a .cs extenstion.
In a very general sense a user control is easier to create. You can drag existing controls like textboxes, labels, etc on to the form. Custom controls are generally more difficult (time consuming) to create, but offer greater flexibility, customiseability, and integration.
The major difference in a nutshell is this:
A user control is made up of existing controls. It is also sometimes referred to as a composite control because of this fact. A typical example is a login form. The form and all of the logic is contained within this 'reuseable' user control.
A custom control is a control that you create. In windows forms this means overriding the OnPaint method as in your example above. Custom controls do not have the same level of design time support as user controls do (ie dragging and dropping existing controls, etc). Custom controls are generally thought of as reuseable components that can be added to the toolbox of visual studio, so they typically are not specific to your business or code.
Here is a link that goes into the different forms with some code examples: http://samples.gotdotnet.com/quickstart/winforms/doc/WinFormsCreatingControls.aspx
You may want to use UserControl if you want to group many controls in a group. That is, create a group of controls. This is tipically done when you want to use same group on control in different part within your project.
You may want to use the CustomControl when you want to extend an existing control. The control is compiled in a DLL file, which you can reference from different projects.