Sending float ROCK SOLID over Bluetooth

    time = millis(); while (millis() <= time + 350);

There is NO advantage that that crap over delay(350). In fact, it's harder to see that that is what it is doing.

There is NO guaranteed way to get serial data delivered. The best you can do is use start and end delimiters and a check sum, and then discard any packet that does not contain the expected data.

At a minimum, you need to send an end-of-packet marker, and read data until that arrives, NOT until time is up.