Hello Ian, When you're undoing you do something more? call edit? Have a user control? custom properties on BO?
All of that stuff is important, as Edhy Rijo says, BO is dirty and the best can be to debug the change of the diry property on the BO, something is changing that and will give you why this is happening.