However after some time (typically hours) I get weird messages:
Sounds like you're running out of memory slowly. Get rid of the usage of the String class. Although the worst memory leaking bug was fixed in version 1.0.5 of the IDE it still makes excessive use of dynamic memory allocation which fragments the memory and at some point it cannot allocate enough memory. At that point things get weird and unpredictable. Convert the complete string handling to C strings (character arrays).
Also use the F() macro for all constant string calls to print() and println() methods.
How can I implement something that checks if the start bit is correct?
You can parse the message and react on each byte instead of reading 5 bytes and checking for complete combinations. Although if the mower is only sending data if you sent a command before, this shouldn't be necessary.