Just tested one intuition, and it was true.
Use 101 for 100, it seems you need to add 1 to the wanted value.
It was not obvious since even GUI use the native without a such offset.
But the morph tricks also work with 100, and not with lower values as expected, so i don't really know what to think about that. It's the weirdest jass bug i've ever seen.
Anyway, just use 101.
However more tests would be good, i mean if you need to apply this offset every time or just for a complete construction.
EDIT : Ok i couldn't leave it like that and i've made more tests.
When a structure is being built in the native way (i mean without any function call) its life is increased as long it's not finished.
But when it's done with this function, its full life is reached when it's 90 %, probably because they forgot to consider the starting life (10 % of max life), so it's one other bug.
Also this function doesn't take in consideration the current life of the structure being built, unlike the native way, it just set the life according to the percent asked.
Now, since it's annoying to test it precisely i've not made the tests about the function UnitSetConstructionProgress accuracy, in term of construction time.
So either increment the wanted value, or make yourself the tests if you care about accuracy.
Also about the life thing, if in no way the construction life can change (damage or function call), then you can check its construction progress, simply by comparing its current life to the life max.