Just so I understand you, here is an example which I think fits your description.
Lets take Moonfire and assume it will last 12s without haste. Lets also assume a tick will do 100 dmg. Now we add 10% haste.
The new tick rate can be calculated with haste_tick_rate = base_tick_rate / (1 + haste) (Only works with a positive haste value. Negative values are calculated differently). Of course haste is a decimal value.
The time line would be:
2.7s - 100 dmg
5.5s - 100 dmg
8.2s - 100 dmg
10.9s - 100 dmg
12 - 40 dmg
The value of the partial tick would then be:
part_tick_dmg = tick_dmg * time_since_last_tick / tick_rate = 100 * (12 - 10.9) / 2.7 = 40
Note: Numbers here are rounded off.
In case of refreshing, this now adds a small issue where the partial tick at the end must be added to the new partial tick, because else you would lose a bit overall damage. But that would not work either, because then if you always refresh the dot, the partial tick, which after a couple refreshes is now higher than a regular tick, will never actually do its damage unless you let the dot run out.
What can also be done is to add the partial time (time since last tick) to the new dot application, possibly adding another tick. This way, if you always refresh your dots, the damage lost would only be one partial tick. Which is insignificant. In fact this last bit seems most likely the route Blizzard will take.