UPDATE: Here's the output for one of the ATMEGAs that failed to program.
/usr/bin/avrdude -c avrispv2 -p m328p -P /dev/ttyACM0 -e -U lfuse:w:0xe2:m -B 250.0 -U hfuse:w:0xd9:m
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.07s
avrdude: Device signature = 0x1e950f
avrdude: erasing chip
avrdude: reading input file "0xe2"
avrdude: writing lfuse (1 bytes):
Writing | ################################################## | 100% 0.07s
avrdude: 1 bytes of lfuse written
avrdude: verifying lfuse memory against 0xe2:
avrdude: load data lfuse data from input file 0xe2:
avrdude: input file 0xe2 contains 1 bytes
avrdude: reading on-chip lfuse data:
Reading | ################################################## | 100% 0.02s
avrdude: verifying ...
avrdude: 1 bytes of lfuse verified
avrdude: reading input file "0xd9"
avrdude: writing hfuse (1 bytes):
Writing | ################################################## | 100% 0.02s
avrdude: 1 bytes of hfuse written
avrdude: verifying hfuse memory against 0xd9:
avrdude: load data hfuse data from input file 0xd9:
avrdude: input file 0xd9 contains 1 bytes
avrdude: reading on-chip hfuse data:
Reading | ################################################## | 100% 0.02s
avrdude: verifying ...
avrdude: 1 bytes of hfuse verified
avrdude: safemode: Fuses OK (E:07, H:D9, L:E2)
avrdude done. Thank you.
/usr/bin/avrdude -c avrispv2 -p m328p -P /dev/ttyACM0 -U flash:w:serial.hex
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.07s
avrdude: Device signature = 0x1e950f
avrdude: NOTE: "flash" memory has been specified, an erase cycle will be performed
To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: reading input file "serial.hex"
avrdude: input file serial.hex auto detected as Intel Hex
avrdude: writing flash (912 bytes):
Writing | | 0% 0.00s
avrdude: stk500v2_ReceiveMessage(): timeout
Writing | ###### | 12% 2.84s
avrdude: stk500v2_ReceiveMessage(): timeout
Writing | ############# | 25% 5.68s
avrdude: stk500v2_ReceiveMessage(): timeout
Writing | ################### | 37% 8.52s
avrdude: stk500v2_ReceiveMessage(): timeout
Writing | ############################### | 62% 14.20s
avrdude: stk500v2_ReceiveMessage(): timeout
Writing | ###################################### | 75% 17.04s
avrdude: stk500v2_ReceiveMessage(): timeout
Writing | ############################################ | 87% 19.89s
avrdude: stk500v2_ReceiveMessage(): timeout
Writing | ################################################## | 100% 22.73s
avrdude: 912 bytes of flash written
avrdude: verifying flash memory against serial.hex:
avrdude: load data flash data from input file serial.hex:
avrdude: input file serial.hex auto detected as Intel Hex
avrdude: input file serial.hex contains 912 bytes
avrdude: reading on-chip flash data:
Reading | | 0% 0.00s
avrdude: stk500v2_ReceiveMessage(): timeout
Reading | ###### | 12% 2.80s
avrdude: stk500v2_ReceiveMessage(): timeout
Reading | ################### | 37% 8.39s
avrdude: stk500v2_ReceiveMessage(): timeout
Reading | ######################### | 50% 11.18s
avrdude: stk500v2_ReceiveMessage(): timeout
Reading | ############################### | 62% 13.98s
avrdude: stk500v2_ReceiveMessage(): timeout
Reading | ############################################ | 87% 19.57s
avrdude: stk500v2_ReceiveMessage(): timeout
Reading | ################################################## | 100% 22.37s
avrdude: verifying ...
avrdude: verification error, first mismatch at byte 0x0000
0x80 != 0x0c
avrdude: verification error; content mismatch
avrdude: safemode: Fuses OK (E:07, H:D9, L:E2)
avrdude done. Thank you.
Makefile:9: recipe for target 'program' failed
make: *** [program] Error 1