ATmega328P running on CR2032 has issues with timing/sleep code as voltage depreciates over time
It looks like you're running the MCU outside the safe operating area with a coin cell. According to the ATmega328P datasheet, page 316, the minimum safe supply voltage for 16MHz is around 3.8V (the red markings are mine). You should expect to see erratic behavior in that case. In practice, you're just overclocking your MCU. See what Russell McMahon has to say about this.



As for the AA vs. coin cell question, it has to do with the fact that AAs have a much higher discharge rates (AAs can deliver a few amps). Coin cells (see a sample datasheet) may deliver up to a few mA for short pulses.