これ、仕様だったんですね。仕様を見直した方がいいかもしれませんが。(^^;
さて、ContextMenuStripのOpeningイベントは、e.Cancel = true にすると、キャンセルすることができます。
実は、Openingイベントが呼ばれた時に、ContextMenuStrip.Itemsが一つも無い場合、自動的にe.Cance = trueになります。つまり、コンテキストメニューが表示されなくなります。これは、動的にItemsを制御しているような場合に、発生すると思います。
この解決方法は、明示的に e.Cancel = false を書いてあげることです。
private void contextMenuStrip1_Opening(object sender, CancelEventArgs e)
{
e.Cancel = false;
・
・
・
}