[quote user="eric krieg"] I can't understand how such changes would make something as dramatic as the ADC going into complete failure mode while all other functions are untouched.[/quote]
This is completely possible if the reason for failure is a racing condition in your code logic. Changes in the execution speed or code size will then perhaps completely change the likelihood that the racing condition triggers a bad effect.
There are some known cases where the hardware has problems, but usually (with some magnitudes higher probability) it is a code flaw. Missing required delays (e.g. for reference settling), premature interrupts due to wrong initialization etc.
Sometimes, code that seems to work, only does so coincidentally, and every minor - even unrelated – changes may break it.