AT328p bootloader stuck in reset loop

I have a board that's built around an AT328p running Arduino. I've had a large number of these boards running well for a couple of years. Recently, with the latest batch of boards, the microcontroller gets stuck. I didn't change much (anything?) with this latest batch of boards so I don't have much to go on.

When it's stuck, the processor seems to be in a reset loop inside the bootloader. When I scope the c8MHz crytal, it's running correctly. If I put a scope on the SCLK line, I see it sending a short pulse about 4 times per second. I assume it's part of the bootloading process. If I pull the reset line low, the SCLK pulses stop, and when I release the reset pin, the pulses start again. If I power cycle the processor, everything starts up normally and I can't get the processor to lock up again.

What causes the board to hang is when I press a button which triggers an interrupt routine and a timer. Based on the LEDs on the board, it seems like the interrupt routine or the timer hangs and the LEDs will stay lit when I'd expect them to flash and turn off. This only seems to happen to boards that have been sitting for a long time in a low power state. After power cycling the board, everything works normally.

Based on the correlation of the failure with the interrupt/timer routines, I'm wondering if there's some sort of timer overflow which can cause the device to keep resetting. I do not use the watchdog timer anywhere.

Does anyone have ideas for what to try next? Is it possible for the watchdog timer to enable itself?