Describe the bug
Because $applyMergePatch assigns the mutated properties to the target properties, you get this fun situation:
const mpModel = getMergePatchFromGraph();
const clone = $.type.clone(mpModel);
$.type.finishType(mpModel);
mpModel.properties === clone.properties; // true!
I think it's an important invariant that the clones have fresh properties. This caused all sorts of strange behavior that was hard to debug.