Bueno pienso lo siguiente.
Si tenes el codigo en una interrupcion y ocurre un Overrun especialmente cuando tenes buffer para 2 caracteres + un tercero en el registro de desplzamiento llegando. Entonces estas haciendo algo mal. O es demasiado lento el micro lo cual no creo que pueda ocurrir.
Por otro lado, esto:
cRCSTAbits.cRCSTA = RCSTA;
Utilizando la misma nomeclatura que la MCHP, asi que voy a suponer que estas usando XC8, Si utilizas las misma nomeclatura, cRCSTAbits es una estructura de 8 bits, y cRCSTA es de 1 bit, por lo tanto estarias intentando meter un registro de 8 bits (RCSTA) en 1 bit ( cRCSTAbits.cRCSTA ).
Por otra parte ese micro tiene 2 UART, por lo tanto seria RCSTA1 o RCSTA2. Y no un RCSTA solo como si tuviera un solo UART.
Tambien esto:
CREN=0; // error reiniciando CREN y dejamos la interrupción preparada
CREN=1; // para procesar la siguiente trama DMX
No deberias poder hacerlo asi, ya que CREN no estan definidos de forma "suelta" sino en su estructura, ya que ese CREN puede servir para ambos, tanto para la UART1 como la 2,
RCSTA1bits.CREN=0;
RCSTA1bits.CREN=1;
( Si es que usas la UART1, obviamente )