I got this working, in the replaceSelf function that was being called by the undo/redo, I added this code:
[undoManager registerUndoWithTarget:self selector:@selector(replaceSelf:) object:ps];
Where ps is the current project state before the undo/redo is done. This got it working for me!