We are doing our first "real" low-power app and chose the Mega48 based on our experience with the AVR line. [The other pick would be the TI MSP430 series, but we were under a time crunch and do not have very much experience with producing complete apps with that microcontroller.]
We were pleasantly surprised (given that the Mega48 series is brand-new) to find that the chip operates exactly as described in the datasheet, including the power consumption numbers and graphs. Full disclosure: we are targeting the PowerDown mode, and didn't do a lot of work with the other modes.
The app is normally DC powered through a regulator, and has many peripheral subsystems enabled. These include all three timers, UART, ADC, & several pin-change interrupts.
When the DC power goes away, we go to the power-down mode after shutting down all the subsystems except a couple of pin-change interrupts to service events that must be processed under battery power. The base "draw" in power-down is about 0.2uA @ ~3VDC direct from the battery with no regulator.
Of course, it takes careful attention to each component to assure no leakage when one is concerned with uA. But the analysis and testing proceeded in a straightforward manner.
We found one gotcha that required some rework. We were using a 3.6864MHz crystal as the primary clock source. We found that (just as the datasheet stated!) it takes quite some time for the crystal to be completely crystallizing when waking up from powerdown. The delay turned out to be too long to correctly service the needed events. So we switched to the internal [nominal 8MHz] oscillator, divide by 2, then tune OSCCAL to as close to 3.6864 as we can get, using a 32kHz crystal on TOSC1/TOSC2 as the fixed time base for calibration. 57600 baud UART communications seem to be working fine. (The internal oscillator has a much quicker startup from power-down.)
Summary: The Mega48 seems to be a fine candidate for battery-powered apps if the stated specs meet the design requirements.