thanks for the tips!
I managed to get it working, but the sharpdevelop dom checking needed to be done after the codedom had been commited to the source file, otherwise my checker would remove all properties and events for newly added components. I ended up refactoring the section of code which replaces the initialize component method into its own private function, let the mergeformchanges flow once, then at the end run my filter and replace the initialize component method with the new changes.
Seems to be working fine, though still feels like such a dirty hack. I wonder how VS does it.