You have to consider that a byte to send will first be removed from the FIFO-buffer (which is empty then) and put into the TX-register which is not empty now. You have to wait until the transmission is done before switching to receive mode.
Did you tell me about "void SendDataChar(unsigned char cData)"?
void SendDataChar(unsigned char cData)
Further more, can you check void SetP04ToTX(void), void SetP04ToRX(void), please?
After switching mode, need time delay?
There is no delay needed after switching the pin modes, you only have to be sure that there is actually no transmission running that you will abort by reprogramming the IO-pin.
What I am dubuous about is the fact, that you wait for 3 similar characters so that you are not able to tell when you missed one char whether you expect now the second to the third (or the first). When you have influence on the protocol I would suggest to send a lead-in character (SOT is a good candidate) to get the begin of a message.