Exception reports obtain the windows version using the unmanaged GetVersionEx function in kernel32.dll. However, the values returned from that function are identical between XP 64-bit and 2003, Vista and 2008, and Windows 7 and 2008 R2.
To differentiate between these requires a couple of extra unmanaged function calls, which were added in 6.0. Unfortunately, exception reports created by previous SA versions won't have this extra data in the exception report, so will display as the lowest possible version (as you are seeing).
The windows version is correctly reported from assemblies processed by SA 6.0, and is only an issue when viewing reports generated by previous versions. Unfortunately, as the data we need to differentiate the versions simply does not exist in old exception reports, there is no way to fix the behaviour you are seeing.