ATmega2560 not responding on hand-assembled PCBs
Okay, I figured out the problem. It was simply that avrdude was trying to communicate too quickly for the default clock (8MHz internal oscillator divided down to 1MHz). Adding the -B 3 option to avrdude to set the bitclock fixed the problem (insofar as it responds with the right device ID).

Thanks to @user19579 for the Port F hint that convinced me it was powered up okay.