Actually, SLEEP() works exactly like you want it to, i.e. like a pause in your program, with automagic resumption after the SLEEP() command. If you set the watchdog beforehand, it'll turn into a timed sleep (just don't forget to disable or otherwise handle the watchdog after sleeping!)
The documentation is clear enough: it says that on watchdog reset during sleep, or !MCLR reset during sleep, all registers keep their values except for these four bits: !TO, !PD, GPWUF and CWUF. They allow you to check why you woke up, whether it was the watchdog expiry, whether !MCLR was pulled high, or whether one of the peripherals caused it. If there's only one possible wakeup source, i.e. just the watchdog, you can ignore those.