AVR program behavior incorrect after disabling reset fuse
I discovered the solution to this problem!

I wrote a batch file to compile the code, convert to hex, and write to the microcontroller in one go. To avoid accidentally disabling the reset fuse, I wrote a second batch file.

At some point, I was experimenting with different optimization levels with avr-gcc. My command line parameters for avr-gcc included -O3 in both files. I discovered that this level of optimization was unreliable and caused some issues. I changed it back to -Os but only in the first batch file, not the second.

So, the code behavior change was a result of an incorrect optimization, which was used only in the script I used to also disable the reset fuse. It was finally caught by an astute coworker who noticed the difference in the two scripts.