Here's some of my advices. Assumming your INTCON an all interrupts settings are nice, i prefer to read the whole PORTB and keep only the revealant bits in one shot.

INTSOURCE = PORTB & $0F ' this will keep PORTB<3:0> only

and then you use a Select Case INTSOURCE or BRANCH.

You forgot the DISABLE/ENABLE RESUME stuff.

Code:
ON INTERRUPT GOTO start

resume
MIIIIIIIIIIP! that resume will act as a RETURN... and will cause you something like a stack underflow. remove it.

Read the manual once again.