I don't see a clear reason for frequent receive failure, some problems exist however:
- GPSIN must be registered for a reliable startbit detection.
- bittimer should be reset on start
Usually, an UART would start with a bittimer period of a half bit length and immediately reset the receiver if an invalid start bit (e.g. an input glitch) is detected. I also don't understand the motivation for the 1.35 bit length timer interval, but it should work anyway.
NMEA standard specifies 8,N,1 frame, it can be expected for your GPS device as well.
As a general comment, the Verilog language knows various constructs to write the bitshifts more compact, e.g. as a for loop or a concatenation. I would also prefer an array of bytes for the output data. Although Verilog is somewhat limited in representing data structures, it can do better.
To understand, why the design receives many telegrams incorrectly, I suggest SignalTap.