Yep, that’s the way it works currently. Given that the curve is not always an even multiple of the pattern length, the idea I think was to avoid bits of line that are either too short or too long at the ends. You also need to avoid the fact that there is space at one end - it always has to finish on a line segment, not a space.
The arbitrary minimum limit seems to be (by observation) half the normal line value; maximum is double the value. So, for example with a dashed line 1,1 (line 1 unit, space 1 unit), if you make a line exactly 10 units long, you will get half length dashes at each end. If you increase the line length gradually up to 12, you will get longer and longer ends - up to almost 2 units in length -until you hit exactly 12, at which point it will go back to a half length start and end.
I know all this because I had experiment to figure out what the algorithm does in order to create my “explode linetypes” script.