No you cannot depend on the condition createdDate != changedDate, this could easily be the same. Why not add a boolean attribute yourself that you change on your save button? Call it IsInitialized or something like that. Remember to set it to true in all ways that this object is created.
Though if you rollback objects properly on cancel, this problem only occurs if people close their browsers (or navigate away) often while in the process of creating an object. I'm not sure it's worth it.
you are right about this condition is not perfect,which would be nice if it was true rather than adding this Boolean and managing it myself which is difficult to apply on all the entities so I will not be able to use the default save button of mendix and need micro-flow button to do this change or using event like after commit and both are costing.
Regarding it is worth or not,we have Business intelligence software that making statistics on many levels of entities like count of records which may gives wrong result about them .
Tested a bit this morning (in 3.0, but my guess is that the same holds for 2.5).
The empty records are indeed tricky. A rollback action does not always delete uncommitted objects. It only deletes them if they were not changed outside the form that creates them. If your application somehow changes the object in another transaction (without commit), the rollback will not remove the records. And if you close the form and then rollback in some later stadium, the rollback won't work remove neither, and you will end up with empty records.
So currently managing your own Bools seems the most reliable approach in complex cases.