Nikolay Sivov (@nsivov) commented about dlls/oleaut32/variant.c:
hres = VariantChangeType(&varRight, &varRight, VARIANT_LOCALBOOL, VT_BOOL); if (SUCCEEDED(hres) && V_VT(&varRight) != resvt)
{if (V_VT(&varRight) == VT_BSTR){if (d >= I4_MIN && d <= I4_MAX) resvt = VT_I4;} hres = VariantChangeType(&varRight, &varRight, 0, resvt);} if (FAILED(hres)) goto VarAnd_Exit;
I don't think this is in the right direction. Also submitted some additional tests in !9201, that show existing issues.