<p>Imagine you want to animate some object on a WinForm. You setup a timer to update the state or model, and override the paint event of the Form. But from there, what's the best way to continually repaint the Form for the animation?</p>

<ul>
<li>Invalidate the Form as soon as you are done drawing?</li>
<li>Setup a second timer and invalidate the form on a regular interval?</li>
<li>Perhaps there is a common pattern for this thing?</li>
<li>Are there any useful .NET classes to help out?</li>
</ul>

<p>Each time I need to do this I discover a new method with a new drawback. What are the experiences and recommendations from the SO community?</p>

What you're doing is the only solution I've ever used in WinForms (a timer with constant redrawings). There are a bunch of techniques that you can use to make the user's experience with it smoother (such as double-buffering).
You might want to give WPF a try. There are built-in facilities for doing animations in WPF, and they're much smoother (and require less code and no synchronization on your part) than a timer-based solution.
Note that you do not need to use WPF throughout your whole app for that solution; it's possible to pack this functionality into a WPF control and embed the control in a WinForms application (or an unmanaged app, for that matter):
http://www.codeproject.com/KB/WPF/WPF_UserControls.aspx