All strings past to the OLEVariant for the automation is suppose to be WideString.
The compiler will automatically make constant strings a UTF8 string etc.
Most if not all of Office Automation requires widestring.
MyOldVariant := 'My text' will end up a UTF8, not a wide string.
I suppose earlier versions of the compiler during the bronze age may have known this for OLEVariants and did it correctly, but since the compiler is in full swing of UTF8, it appears things maybe getting in the way.
Those are my assumptions, I normally type cast everything using Fpc.