A volte ricasco nella brutta abitudine di sfruttare la proprietà Visible e puntualmente vengo punito per questo...smile_teeth
Volendo abilitare dinamicamente le voci di un context menu, una strada consiste nel agire sulle varie voci all' interno dell'evento Opening, esempio:

   1:  private void contextMenuStrip1_Opening (object sender, CancelEventArgs e)
   2:      {
   3:        mnuCopy.Visible = true; //this.GetCopyPasteStatus();
   4:        mnuPaste.Visible = mnuCopy.Visible;
   5:      }

Il problema è che il tutto non funziona in quanto la proprietà Visibile si comporta nella maniera corretta, ovvero indica se il menu è attualmente visibile (e nell'evento Opening non lo è...).
Questo è un esempio banale, ma in alcuni casi la tentazione di usare la visibilità di un controllo in sostituzione ad un flag può portare a dei comportamenti a prima vista inspiegabili.