Low power sensor module
The Arduino is not designed for low power. For an answer to another question I recently estimated the Uno's current at 50 mA, at a 9 V input that's 450 mW. Part of the reason for the high power requirements is that Arduino has 2 microcontroller running at high clock frequencies.  

Switching to the MSP430 platform looks like a good idea. I've used MSP430s running of a 32.768 kHz crystal which needed only 4 \$\mu\$A. (Power-down modes can go lower, but I couldn't stop the 32 kHz oscillator, because it took too long to start up.)  

Then there's Xbee. A current of a few tens of mA is not unusual for RF modules, but maybe you can cut the average power consumption by switching it off for most of the time. This module has a transmit current of 48 mA, and a 27 mA receive current. If you would only transmit, and do that for 100 ms every minute your average current is 80 \$\mu\$A. Add 5 \$\mu\$A for standby and the MSP430, and a 250 mAh button cell will power it for 4 months. That's less than you specify, but somewhat better than the 1 hour you have now.  

Other measures: try to get the Xbee's duty cycle further down. How much time do you really need to transmit a measurement (the 100 ms was a guesstimate)? Do you have to send every minute? Remember that 95 % of the current goes to the Xbee. If you can send once every ten minutes instead of every minute the battery will last 2 years! Smaller gains: can you shut the Xbee completely down instead of going to sleep; would save you 1.7 \$\mu\$A. Can the MSP430 run at a lower clock speed?  

You will find other RF modules which require less power, but the 2 mile range may be a problem then.