You can simply shut every thing down that could cause a wake up, then SLEEP. Then it will require a mclr reset or power off/on to run again. Sleep will not draw any significant current if done right (pay attention to the output pins, they remain unchanged in sleep).
If you want to wake from user input and have a switch, there are IOC pins on port b, and an int pin, which can cause a wake from sleep.
Chapter 9 in the datasheet will give details of sleep.
This is overthinking a bit, but to provide another alternative for thought-
if you want to run the app (I gather from previous threads, recording temp at intervals) then power off, and not run again (and overwrite previous records) until certain conditions (like a power-on reset occurring) you could-
in your startup code, check the STATUS and PCON registers, and if the power-on reset combo is not set (table 7-3,7-4), SLEEP.
STATUS ---11000, PCON 00--110x
uint8_t p = PCON;
PCON = 0; //to prevent BOR appearing as POR
if( ((p & 0b11001110) != 0b00001100) || ((STATUS & 0b00011000) != 0b00011000) ){
SLEEP; //not a POR, no run
}
when you want to 'shutdown', just issue RESET instruction
Now, since you are always at a reset condition when SLEEP is run, you will be pretty much at the lowest power as you cannot forget to turn things off (pins, timers, etc.) since they are not setup yet, and the only way to start the app, is via a power up. Any other reset will result in SLEEP and preserve previous recordings.