Reading Stop and Start Bits

It seems you control both sides of the communication. Why don't you use Manchester encoding to have at least one state change in every bit sent. Then use some CRC to check for transmission errors. This has the drawback that higher transmission frequencies for the same amount of data are needed but if you have such a noisy communication channel you probably have higher transfer rates in the end.