The text "ovf" appears in the Arduino core file print.cpp.
if (number > 4294967040.0) return print ("ovf"); // constant determined empirically
if (number <-4294967040.0) return print ("ovf"); // constant determined empirically
The Arduino floating-point print function is a little simplistic. It can't do exponential notation and it converts the value to an unsigned long int as part of the process. So that determines the maximums above. The float variable is not damaged and it still holds a valid value, it just can't be displayed by the regular print function.
It doesn't explain the behaviour though - the program printed several values of rotX successfully before showing "ovf". That is derived from a 16-bit integer, so it can't overflow the print function anyway. If the problem was the initialization of the total, then it would show up the first time, not the last.