There is indeed a known bug in message passing (actually a wxWidgets problem, not a Code::Blocks one) that causes all other plugin events being fired twice, too. While this may in theory have quite nasty consequences (imagine a plugin doing an automatic commit on file save), it is luckily rather harmless in practice. A solution is being worked on, but no release date is known yet.
However, even if everything works correctly, you must be prepared for any of your callbacks to be called at any time, and more often than once.
Regarding BuildMenu(), you need to take care of keeping things you add/remove/modify sorted, unlike BuildModuleMenu() (the former works on the menu bar owned by the application, the latter on a throwaway menu).