I believe I've had the same issue you've mentioned. My objective was to disable a "save" button and prevent a network request, if the form corresponding to some model wasn't in fact changed from its initial value. Getting around it is fairly straightforward if you're willing to make changes to the ngModelController and FormController within Angular. You can also get around it by sort of conditionally monkey-patching those two controllers from the outside.
I actually posted about this a little while back (see:
https://groups.google.com/forum/#!topic/angular/e88cLhrrgmM ). In that post, you can find a plunkr demo with sort of a working solution, albeit a hack. I basically just added a $revisionValue property to ngModel which tracks the last known persisted value of the model. The ngModelController also tracks a property published to a parent scope, which indicates when a new revision has been persisted and resets the $revisionValue to the latest persisted value. Then, whether a model is $dirty or $pristine depends on whether its current value matches its $revisionValue.
Lastly, to solve the problem of the "save" button -- i.e. disabling/enabling it based on the entire form being $pristine or not, I added a method "$isAllPristine" to Angular's FormController, which loops through each contained control, stops when it finds one which is $dirty, and finally returns true/false depending on what it finds. The save button can then watch the result of $isAllPristine on its parent FormController and be enabled/disabled accordingly.
-west