Math is always good.
The basic approach you are taking appears correct, but your rounding (or at least your method of rounding) seems to be getting you into trouble in some corner cases. Those 100 mps values are much too high.
Here is a breakdown of the player's energy (scount) over time for a base move time of 410ms. (Spoiler'd for lots of boring numbers)
initial: 5000
move: 4590
.5s elapse: 5090
berserk bonus: 5490
move: 5080
move: 4670
.4s elapse: 5070
berserk bonus: 5470
move: 5060
move: 4650
.4s elapse: 5050
berserk bonus: 5450
move: 5040
move: 4630
.4s elapse: 5030
berserk bonus: 5430
move: 5020
move: 4610
.4s elapse: 5010
berserk bonus: 5410
move: 5000
repeat...
total moves: 10
total elapsed time: 2.1s
average mps: ~4.76
But wait! What if the player's initial energy is different?
initial: 5010
move: 4600
.4s elapse: 5000
berserk bonus: 5400
move: 4990
.1s elpase: 5090
berserk bonus: 5490
I stopped because 5490 is one of the states in the above cycle... so 5010 is not part of a steady-state. But here we do see the .1s elapse that you were getting from your formula.
It may not be the case that there is always a unique steady state (well here the one's digit case can be changed, but it isn't meaningfully different), I haven't considered it carefully enough yet.
For a base move time of 400ms, you will get exactly 2 moves per turn for a mps of 5. There is no danger of infinite moves per second.
I'm not sure what the proper formula should look like yet, but I'll think about it some more.