Que tal,
Hace algun tiempo tuve el mismo problema con el serin2 o hserin cuando intentaba recibir una serie de datos, tal como la describes. Y encontre que sucedia la siguiente. Cuando usas la sein2 rx,32,3000,nada,[wait("GL")], teoricamante la instruccion debe esperar a recibir los caracteres G y L en un lapso de timepo de 3 segundos, pero si no reibe ningun dato debe ir a la etiqueta nada. Y efectivamante lo hace, pero el problema es: que pasa si se reciben datos cuales quieres que sean, es decir datos completamente diferentes a los caracteres esperados, es decir la funcion ya ha detectado la recepcion de datos y comienza a compararlos, pero como nunca son GL entonces la funcion se queda ahi "colgada", esperando dichos caracteres y el tiempo de 3 segundos ya no corre. Lo que hice fue implementar el uso del WDT y si se queda colgado el WDT reiniciara el codigo, yo lo use con un PIC18F4620 que tiene un periodo de WDT mas amplio. En tu caso que estas usando un PIC16, tal vez esto no funcione a menos que el dato llegue en menos de 2.3 segundos que es el periodo maximo para el WDT. Otra cosa que puedes ahacer es usar el UART interno para esto y reasignar los pines y asi esperar a que llegue un dato y tu compararlo con el que esperas pero esto calr tendrias que ser "a pie" le digo yo. Algo asi como.
1. Inicializas un timer
2. Ha llegado dato?
3. No, entonces pregunta si ya se termino el tiempo de espera en el timer?
3a. No, entonces ve a 2 a preguntar por el dato
3b. Si, entonces ve a etiqueta "nada"
4. Si, el dato recibido es una "G"?
4a. Si, entonces fin
4b. No, entonces ve a 1.
Espero esto te sirva y te ayude a resolver el problema.