I understand that you're not too familiar with Reactors, so please forgive anything that follows, that your are already adept at.
One of the rules of reactors / event handlers, is that you cannot open an Object that is already open in the Database (in any API).
One common way of doing 'something' to an Object after being modified, is to monitor CommandWillStart Event for specific Command(s), then register an ObjectModified Reactor to filter for specific Object Types, and store their ObjectId to global variable, unregister said ObjectModified Reactor upon CommandCancelled, CommandEnded, or CommandFailed Events, and then process the ObjectIds previously stored (as they're now closed).
This works great for many things, but is utterly ineffective at both capturing ObjectIds, and acting on them when modified via Properties Pane... Even when you remove the CommandWillStart Event dependency, continuously monitoring ObjectModified is not only inefficient, but no Event is subsequently raised in which to process the ObjectIds stored... There are Events, they just require the cursor back within the Editor window, which obviously intoroduces lag, which is less than desirable.
The only way I know of, to truly act on an Object at the time it is modified via Properties Pane, is to implement a .NET Close() Method Override via ObjectOverrule (something I learned from TheMaster);
here's a quick video demonstration, from an 'AnnoAuto' plugin I use to dynamically manage MLeaders, etc.
Perhaps if you could clarify exactly what you're after (I haven't read through your code), we might be able to better offer some help.
Cheers