Now if a 32 bit loader tries to install 64 bit library into system32 directory and checks the version of the one which is there, and at the same time has (unlrelated) 32 bit library with the same path loaded from syswow64, the version will be loaded from the installer's in-process loaded library and not the one which exists on disk in unredirected system32.
One could expect that it is GetFileVersionInfo() bug which will get the version info from the long library. But the test in patch 2 shows that GetFileVersionInfo() behaves like on Windows there, while test in patch 3 shows that MSI checks the version correctly on Windows. Which suggests msi.dll is the right place to fix it.