Permanent Sleep eh?.... Well apart from a Sledge Hammer... try...

@ SLEEP

The PIC will sleep PERMANENTLY until woken by an interrupt event... this does not mean you have to embed Assembler interrupts or the like, execution of the program 'should' continue from the next instruction when the PIC is woken from it's slumber.

For example this snippet of code shows (for a 16F628) what Registers you need to set in order to trigger a wake event...

Code:
	'
	'	PIC Low-Power Sleep Routine
	'	---------------------------
		'
		'	Set Sleep Interrupts
		'	--------------------
	INTCON=%00011000	' Interrupt Control Register
				'    7=0 - GIE  - Global Interrupt Enable
				'    6=0 - PEIE - Peripheral Interrupt Enable
				'    5=0 - TOIE - TMR0 Overflow Interrupt Enable
                                '    4=1 - INTE - RB0/INT Enable
				'    3=1 - RBIE - PORTB change interrupt Enable
				'    2=0 - TOIF - TMR0 Overflow Flag
				'    1-0 - INTF - RB0/Ext Interrupt Flag
				'    0=0 - RBIF - PORTB Interrupt Flag
	OPTION_REG.6=1		' 1=RB0 Rising-Edge Trigger, 0=Falling-Edge Trigger
		'
		'	Reset Interrupt Flags
		'	---------------------
	INTCON.1=0		' Reset RB0 Flag
	INTCON.0=0		' Reset PORTB change Flag
		'
		'	Sleep
		'	-----
	@ SLEEP
	Pause 100		' Needed for system Wake-Up
You can see that I'm setting a wake-up call using either RB0 or PortB inputs. The Pause can be omitted, but works for me, so that the PIC can have a stretch, yawn, light-up a cigarette etc...