Maybe you have some repeated call to invalidate your form while you're painting the controls.
You should do a Debug.WriteLine each time you're in OnPaint to find that out.
Loading the image from file is ok if you don't do that in OnPaint. Another thing to mention is the image size. If it's resized during the painting it may cost valueable time.
Maybe you could post a snippet of your OnPaint routine.