Un flag (bandiera ) e' una variabile solitamente booleana che viene posta a true/false a seconda.

Nel tuo caso, potresti avere una proprieta' di tipo bool (il flag ) del tuo oggetto che viene abilitato a true dal dragEnter e messo a false dal dragLeave.
Il metodo dragOver chiama l'invalidate.

Nell'evento OnPaint, testi il flag per sapere se devi disegnare il rettangolo o meno.

Una traccia di codice potrebbe essere questa.
Ripeto traccia, perche' la sintassi non e' corretta e non compila !!!!

codice:
Class myForm : Form
{
   [..]
   mycontrol_OnDragEnter(sender, event)
   {
      mycontrol.PaintRectangle = true;
   }

   mycontrol_OnDragLeave(sender, event)
   {
      mycontrol.PaintRectangle = false;
   }

   mycontrol_OnDragOver(sender,event)
   {
      mycontrol.Invalidate();
   }
  [..]
}

Public class mycontrol : controldacuideriva
{
   private bool paintRectangle = false;

   public bool PaintRectangle
   {
      set { paintRectangle = value; }
   }

   private override OnPaint(...)
   {
       if (paintRectangle) Disegno il Rettangolo;
   }
}