You're right, you can't have this happen on rollover on a button. The reason is actually quite simple: you don't wan't the menu to pop each time a user accidentally rolls over the button on her way to a different control. It would be extremely distracting and uncomfortable. So what you do is display the menu after a small delay. But that's the standard behavior of a tooltip, so users who hover over the button for a second or so expect a tooltip to appear. So having it display the menu means that you won't be able to use tooltips to explain the function of the button. It also means that other controls in the UI, those who do have a tooltip, now behave in an inconsistent way with these menu buttons.
If this were a different type of control, not as heavily associated with tooltips, then such a menu (with a small delay) could be considered. For example, the username link in the header of StackExchange sites.
Another reason is that a button is meant to be pressed. That's what the users know and expect. If a click doesn't open the menu, what does it do? The placement of objects in the form is done by clicking on the menu item, not the button itself, so the click must open the menu.
The MS Office ribbon is full of buttons displaying large menus - that's a good reference to best practices in this regard.