I have the same problem (using owncloud 7.0) and a solution. After I have detected the continuously worsen of (new) contact pictures, I have found out that the affected contacts remain marked as “dirty” in the android backend. However, the “version” of the raw contact is continuously increasing. Hence, there must be a problem during the synchronization.
Indeed, the DAVdroid logs shows that there is an HTTP error 500 (internal server error) during the synchronization. The logs of my web server show the following error:
PHP Fatal error: Call to undefined method OCA\Contacts\VObject\VCard::getPhoto() in /usr/share/owncloud/apps/contacts/lib/utils/properties.php on line 314
This is a known issue in the owncloud project: owncloud/contacts#585
A (for me) working bugfix is already available: owncloud/contacts#598
After applying the bugfix (change two lines of code), the contacts are now synchronized correctly and are not marked as “dirty” anymore. Although I can prove for sure only in a few weeks, I think this is the solution for the degraded quality of the contact pictures. But please note, that you have to use a new picture for the contact after applying the patch.
@rfc2822: Although this particular error (synchronization is not finished) origins in owncloud, one could argue, that DAVdroid should not behave in this way, i.e. the continuously degrading of quality should not happen. However, I have not looked in the code to find out why the degrading happens and how to prevent it. But, maybe you can use the provided information in order to harden the error treatment of your app, if possible.