Hi,
it's possible to use ModelChangeEventHandler in C#, so the problem is somewhere in your code. But the true is it's useless to analyze why it doesn't work, because as far as I remember, only ModelChangeBeforeActive and ModelChangeActive events are passed to NET API, the rest not.
The best approach is to implement such functionality using native C/C++ code, because it's the only API you can be sure all MicroStation events can be hooked. An alternative workaround is to use ModelChangeActive and maintain a list of models in parallel and if the event happens, to compare if the list is the same or not.
With regards,
Jan