Usually the transmission of byte with SoftwareSerial is much more reliable than the reception because for the transmission the interrupts are turned off during the shift-out of the bits while this is not the case for the reception. If your sensor sends some bytes while the Arduino is handling timer events or hardware serial interrupts it may be possible that the delay between on bit and the following gets to big and slips to the next bit, loosing one. Even the timing of the sending part is not really accurate, the receiving part is often unreliable to unusable with higher baud rates (>9600 in my experience, with very picky devices even less). The less the Arduino is doing apart from the SoftwareSerial communication, the better it works.
You can try to put a cli()/sei() pair of statements around your read calls on the SoftwareSerial and see if that gives you better results. If possible go for the hardware serial interfaces on the Mega.