Suddenly cannot flash ATmega328P due to verification failure
The problem is gone and I wish I could say exactly why. In an act of sheer desperation I did a make clean and then make in the main firmware directory (there are libraries in a couple of other directories that I did not touch). I then flashed a board that had not worked and it passed verification! So I did another board. Passed. And another. Passed. And another. 100% success. No failures at all

I cannot explain why just rebuilding the flash would fix this. As far as I know, avrdude just writes the hex file, reads it back, and compares the two. If anybody has any possible explanation, I'd love to hear it.

On the other hand, there was a lunar eclipse the night before this all started...