A fair miracle it works at all. You are not doing anything to ensure that the interrupt handler is in sync with the SendData() loop. Getting bytes to repeat or disappear is therefore expected.
Two basic schemes. If you don't worry about the delays, like you do now, then you don't use the interrupt. You simply loop until SCON.1 == 1, then write SBUF.
If you do care about delay then you need the interrupt. You'll need a circular buffer to store bytes. Your interrupt handler pulls a byte from the buffer and writes it to SBUF. If the buffer is empty it needs to set a bool to indicate that an interrupt was detected but not serviced. You now send bytes by disabling interrupts and append the byte(s) you want to send to the circular buffer. If the bool flag is set then immediately write a byte to SBUF and clear the flag. Re-enable interrupts.