А зачем "самопальные" Paint? Я не до конца понимаю логику... Подозреваю, что по Action Вы вызываете свой Paint(c, f)? Этого делать нельзя. Хотя бы потому, что Вы не можете делать никаких предположений о кадре за пределами Restore и HandleCtrlMsg, куда он передаётся; он может меняться в любой момент.

Обычно делается так: рисование описывается в yourControl.Restore, а из Action периодически вызывается Views.Update(yourControl, Views.keepFrames). Вы пробовали эту схему? Если да, то чем она не подошла?

А для чего p.OpenBuffer?