Hello, nice article.
I implemented some time ago an article about "Using MVVM to provide undo/redo" that used something similar.
In my version all modifications to the WrapperCollention where converted to commands (for the Undo thing) and send to the wrapped list. The WrapperColletion was actualized using NotifyCollectionChanged. This avoids using _ignoreChanges but maybe is more complex.
My collention also implemented
public interface MirrorCollectionConversor
V GetViewItem(D modelItem, int index);
D GetModelItem(V viewItem, int index);
to convert between ViewItems a Model items, but maybe your IViewModelModelProp is simpler.