This report is very, very useful -- thank you.
Another desync report here suggests that the maze generation has become os-dependent in 0.17: https://github.com/h8ul-modder/factorio-ribbon-maze/issues/38
This is likely to be down to the mathematical operations in the lua implementation on the various platforms.
The reason I implemented a new deterministic random number generator is (ironically) to allow the map seed to generate both the maze and other elements with a proper seed space, while avoiding desync issues.
However this relies on the lua implementations performing 32-bit operations the same on all platforms. They really ought to, because bit operations are well defined, but this is what you get when a scripting language chooses to treat all numbers as floating point: basic operations become more difficult to get right.
I have two ways to go.
1) Admit defeat and migrate to the factorio core's provided random number generator: https://lua-api.factorio.com/latest/LuaRandomGenerator.html -- it should work but would possibly lose seed space. I could ask the devs to explain why this random number generator gives the same numbers for similar seeds.
2) Figure out how lua has come to diverge, see if it can be worked around, and if not get the factorio devs involved. If it's a fundamental problem with lua I have to do 1 anyway: use Factorio's random number generator.
Here is a report I believe is related where maths in lua differs in non-portable ways: https://forums.factorio.com/viewtopic.php?t=62674
I need to do a bit more thinking and investigating, but I believe we are close to understanding the problem.