I identified the difference. I had omitted the #include "../simd/platform.h" thinking it wouldn't impact the end result, but it did.
This file is where the glm code identifies that the compiler is MSVC 2019 and later in setup.hpp allows it to identify that the C++11 feature ‘defaulted functions’ is available and sets ‘#define GLM_DEFAULT = default’.
This in turn is what is causing the asGetTypeTraits<glm::vec2>() to return the wrong flags.
Unfortunately it doesn't seem to be a trivial fix. The C++ ABI in MSVC uses the existence of a non-trivial copy constructor to determine if the object type must be returned in memory instead of CPU registers. Unfortunately it seems the C++ ABI in MVSC doesn't treat a ‘defaulted’ copy constructor as trivial, even though it is supposed to mean the same thing.
I'll continue to investigate, but it may be that I'll be left with no options to fix this problem, and will just have to write it down as a restriction to the asGetTypeTraits that it doesn't work work classes that uses ‘defaulted’ functions.