Anche a me pare corretta... descrivi esattamente in che termini e in che occasioni si verifica il flickering, forse non si tratta di flickering ma di qualcos'altro.
Ah, dimenticavo, puoi rendere un pelo più efficiente la routine effettuando il BitBlt solo dell'area da ridisegnare (eventualmente disegnando solo quella anche nella bitmap, ma qui è più la fatica che il guadagno), impiegando i dati che ti fornisce BeginPaint.