Random ramblings and guesses here, take for what it is:

I'm trying to run a code that when an incoming 2 characters is received, it triggers the interrupt and reads the message.
That's not how it works. The ISR triggers when there's a byte is received. You can't configure it to fire after n character (short of setting up DMA and using that perhaps).

Typically, you'd write the interrupt to receive one byte at a time, putting them into a buffer (array) while looking for some sort of qualifier for "end of message" (number of characters, time-out, certain byte sequence, whatever). Once that qualifer is met you set a flag signaling the main rotuine that data is available. LCD updates etc is handled outside of the ISR.

You say that whatever sends the data sends 10,13 first, then two bytes of interest but you're not looking for the 10,13 sequence in order to "sync" and since you have a lot of slow code in the ISR it might get out of sync and therefor get stuck in the ISR since, once the interrupt fires your code expects 4 bytes.

If it gets 3 it'll sit there waiting for the 4th. Then a new burst of 4 bytes comes a long, where the first one counts as the 4th. Then the code moves on to to update the display while remaining three incoming bytes overflows the UART buffer because you're updating the display and/or executing a massive PAUSE in the ISR.

/Henrik.