I've enountered this situation with an On Change not being committed to the database due to the fact that the Save button completed before the On Change. Not sure whether this effect has always been there or is in fact a bug.
In my situation the workaround was fairly simple: I opted to create a custom Save button where I ensured the On change actions were also triggered before committing the object.
Looking at the problem from your situation, it might be worth it to submit a ticket with Mendix Support anyway. Reason being that my solution (custom microflow) wouldn't have the same result for you. It could still be the case that your custom cancel button finishes before the On Change.
Do note that while the rollback doesn't appear to have happened, this is merely because the On change fired after your rollback. So as long as the On change doesn't commit your object, this 'change' should only persist within your session.
Are you performing a Commit in your On Change Microflow? If so, is this actually needed?