Why are DLLs uninitialized in the "wrong" order?
This is really just a corollary to Why are DLLs unloaded in the “wrong” order. Exactly the same logic that explains why DLLs are unloaded in the “wrong” order also explains why they are uninitialized in the “wrong” order. Once you understand the first issue, the second comes for free; just change
DLL_THREAD_DETACH in your analysis.
Apply the logic to the scenario posed in this comment and you’ll see why it too is flawed.