Holy cow, I wrote a book!
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_PROCESS_DETACH to 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.