OK, I've found out what's happening, but don't know why.
My serial string length is 52 = 25 unicode chars + size and type bytes. In the first case the serial string was initialized with 13 chars + NULL. ( 14 wchars...). The actual 24 wchar serial number was copied to the string in the call to CustomHID_init(). The reported serial number was 14 chars (there that 14 again...).
In the second case, I initialized all 25 wchars in the string with printable characters. Loading the new device results in Windows updating the device's driver, because there is a new (default?) serial number. The actual serial number is copied as before, and the correct 24 wchar serial number (and vendor string) is now reported correctly. A second board with the earlier f/w still shows the truncated serial and vendor IDs.
My theory is that when Windows first enounters the device, it stores the serial number length+NULL, and later when HidD_Get* is called, it returns only the 14 characters. In some fashion this incorrect length is messing up the vendor string length too.
So ... for me the cure is to fully init all the strings with valid chars, not all NULL.
Comments?
SD