The commit isn't executed if a before commit action returns false. I guess you've a before commit action that validates the object and send validation messages. But I also guess you let return your microflow false in case of errors. That's maybe the reason that the object isn't committed. So if you want to commit the object even in case of validation errors, your before commit action have to return 'true'.
The other possibility is that you don't do the validation by a before commit action but that you use data validation on attribute level in your metamodel. Then it's right that the object can't be committed in case of errors. That's default behavior for data protection, and you can't change that. If you don't want that use a before commit action.
Edit: I see your changed question. The client always send a change and commit request to the server when you press the save button even if nothing is changed. So your BC-action always have to be executed when pressing the save button.
But there is a know issue with data validation feedback, maybe that's your problem:
In this case there is a possibility that you miss click the save button, because it moves up for a short time (because the client hides the data validation message). You can try if this is also your problem by applying a temporary style definition to the save button: "height: 200px;". Then miss clicking is very hard ;)