Lamentablemente la mejor manera de prevenirlos es programando a conciencia. El MPASM poco puede hacer por vos, ya que cuando uno programa en ASM es mucho más complejo de seguir (y analizar) el flujo de programa que puede ocurrir durante runtime. Los lenguajes de programación de más alto nivel suelen tener como ventaja que, a cambio de limitarte un poco los saltos de programa, tablas, etc, pueden advertirte en tiempo de compilación que puede que excedas la máxima cantidad de llamadas anidadas y desbordes la STACK (pila), además de que son ellos quienes suelen generar el código para cargar/descargar el STACK y corroborar que siempre tengan coherencias las cargas y descargas.
Vas a tener que revisar que donde hagas un CALL, RETURN, RETLW o RETFIE, la pila se cargue y descargue correctamente. Por cada CALL tiene que haber un RETURN/RETLW o RETFIE en algún momento, y en ningún momento podés anidar más de 8 llamadas, teniendo en cuenta que cuando se ejecuta la ISR, se consume un nivel del STACK también, y que cualquier CALL que hagas dentro de la ISR sigue incrementando la STACK sobre la que ya venía cargada antes de la ejecución de la interrupción.
Saludos