The file was recompiled for MS-DOS 8, so it has the information embedded in the current dosver.h file. The 1995 copyright message comes from the source for the himem.vxd file embedded in himem.sys.
Much of the differences, between eg MS-DOS 6.20 and 6.22 is the change of string x0614 to xo616 (dosver check), and change of the copyright date by way of dosver.h.
The inclusion of himem.sys may have been a failsafe device. It is indeed possible to deactivate various things in io.sys, and it may be possible to deactivate the internal one and load himem.sys externally. Such may had been needed for variant OEMs.
Here's himem.sys from the various versions. One could describe the versions as by binary comparison, giving the version as indicated. The 3000 ebd himem.sys was included after this run, is exactly the same as 3.98 (as far as fc /b is concerned).
32711 0x3BB75359 "3000/himem.sys" 3.99
32935 0xC275B94A "0950/himem.sys" 3.95
33191 0x264590A3 "1111/himem.sys" 3.96
33191 0x9E93ACDF "1998/himem.sys" 3.98
33191 0x9E93ACDF "2222/himem.sys" 3.98
We then look at say, 3.99 v 3.98 (where we find differences due to dosver.h, and differences in the message table. The XMS driver is described as 3.95 in both. 3.99 is then essentially 3.98 with a different message table, to take care of more recent hardware.
Putting 3.96 and 3.98 side by side, we see that 3.98 differs from 3.96 in a lot of byte pairs, having an invariant difference of 0x1001, except when the former starts with f, where the difference is 0x002. Supposing that this is a reversed digits, we suspect that 3,98 is looking for an address location 0x 0110 different for 3.96. At two locations, we see that 3.96 has an isolated byte b8 that becomes c9.
Supposing the address shift fits, we can suppose 3.96 and 3.98 differ simply by relocating some page frame by 17 segments.
Putting 3.95 and 3.96 into tfc, we see that the differences are more varied in the changed byte segment, but the bulk of the changes seems to be a change of order 0x0b80 (reversed), along with isolated changes of 0x10 and 0x40 in some bytes. I suggest that there is further memory fiddling rather than real code change to the driver.
Thus, i suspect that 3.95, 3.96, 3.98 are simply the same driver with getdata.h changed, and that 3.98 and 3,99 simply change the message table. It is then safe to call all of these 3.95, and that for general use, variant 3.98 is the safest one to use.