It appears the Menu control is calling Page.Header.Stylesheet.CreateStyleRule() inside of it's OnPreRender() method overload.
The MenuAdapter has an overideable method for OnPreRender, but if you do override it and forget to (or intentionally leave out) call base.OnPreRender, the menu is NOT rendered at all.
My guess is that because a supertype (BaseDataBoundControl?) is calling DataBind() on the control to get it to populate the menu items.
You could "fake" this behavior with the following overload in your MenuAdapter derived class.
protected override void OnPreRender(EventArgs e)
{
Control.DataBind();
// Do not call the base class implementation.
// base.OnPreRender(e);
}
This will skip registering the stylesheet declarations, but it might also have other effects. I'm not sure what else is going on in the Menu.OnPreRender overload.