Perhaps a second tag, MaxDepthMod, and the slowdown or speedup of the SpeedMod can't exceed the MaxDepthMod?
edit: this is the important part that changed.
speedMod /= (1.0f - std::max(-1.0f, (height * moveData.depthMod)));
x /= y
is shorthand for
x = x / y
Now, consider if DepthMod is zero - that means
speedmod /= 1 - 0
=> speedmod = speedmod/1
so no change
On the other hand, consider nigh-infinite DepthMod. That means
speedmod /= 1 - Max(-1, ReallyHugeSpeedMod * height)
(remember height is negative)
=> speedmod /= 1 - Max(-1, ReallyHugeNegativeNumber)
=> speedmod /= 1 - (-1)
=> speedmod /= 2
So speedmod is just cut in half at the extreme case.
So really, the old depthmod logic is just how quickly a submerging vehicle/robot reaches the 1/2 underwater movement modification cap
The new logic is submerging robot gets slower and slower as it goes deeper, and depthmod is the coefficient of this process
Obviously the missing factor here is a maxdepthmod - one that is either above *or* below 1, allowing for units that move faster underwater too (Smoth scripts this for Gundam, iirc, but that means it's unsupported by the pathfinder).