As others have mentioned, when you're dealing with floating-point numbers, different numbers can have the same internal representation.
10000000/pow(10,8) returns 0.1, but because this is stored as a floating-point number, it has the same byte-level representation as 0.10000000000000001 as well as infinitely many other numbers, and when
echo converts this float to a string, it chooses that particular value to display.
round returns a float, so that doesn't fix the issue: in this case it outputs exactly the same thing that it takes as input.
sprintf('%.8f', $satoshiValue/pow(10,8)) will do what you expected
round to do because it returns a string instead of a float. There are other ways to address the issue, but that's what I'd do.
What PHP version do you use? Mine is 7.4.
The exact behavior of floats might depend on the CPU, OS, compiler, C library, and PHP version. You can't rely on any specific behavior.