I now know why it reads 7.03% when the fan is off and why it's getting 44%+ when the request is 25% (confirmed in INPA). It's not a conversion equation problem, I dug up a fan DC conversion table and cooling mode factor tables for the water pump and fan. The break points in the conversion table are fan set point from 2 calculations and I don't know what they are, but assume they have to do with current/historic mode, ECT, torque request, vehicle speed, IAT, etc. As for the factor tables, the fan has a 70% gain in ECO mode, dropping with each higher mode to 0% with high+KFT.
I confirmed what you saw with a drive this morning, the fan shuts off intermittently. After testing the mode factor tables and changing to hold to a single cooling mode (high), the fan is more or less binary. It's either on at my set minimum level (or a little higher) from the ECT diff table or it's off. Once all the large dynamic conditions are eliminated, it's clear that the fan turns off the split second/one log record that ECT falls below target (-0.25C), even though the ECT diff table tells it not to.
I can only assume that whatever is kicking the fan off when ECT falls below target is a higher level call in the cooling logic somewhere, so figured the easiest thing to do is circle back to that conversion table and just tell it to run 15% when request is 0% (and 1.17% for good measure). That works.
Went back to the normal dynamic cooling mode settings (with my ECO target at 95C) and then logged again. When the fan is requested to go off in the usual spots, it stays running at the 14.84% DC minimum instead of turning off (7.03%) and, of course, runs at ~30% with the ECT diff table still set.
It would be more ideal if the fan kicked on when slow/stopped, even if otherwise commanded off, but that may require custom logic or other tables I haven't found yet lol I'm still digging and there are a few more things I want to mess with, but, for now, this would be at least one potential workaround for the fan turning off while below ECT target.