Well, without your exact iTween parameters it would be harder to offer help. But, I can tell you this: From my iTween experience, I can say ValueTo is working as expected.
There are three reasons that may give you some weird values:
The time of the tween is too short.
And/or it takes iTween a bit longer than expected to start the tween (i.e. the infamous AddComponent hiccup).
And/or you are using some more complex ease type (e.g. elastic, bounce, easeOutBack).
As you know, iTween adds a component to your object that is responsible for the tween. The first time it does that, you sometimes experience hiccups. If the tween is too short, then by the time it starts, it should already be at a higher value (nearing its end) so the update loop may be called only a few times - a couple of times with the values that are near the “from” value, and a couple of times with values near the “to”.
What you can do to remedy the situation?
Check if increasing the time of the tween helps
Check if adding a slight delay to the tween helps
Call iTween.Init( gameObject ) on your Awake() or Start()
If you have many objects that start executing iTween at the same time, you must Init them beforehand and even then, you may need to consider a different approach.
Finally, in your testing, eliminate any other variable, test first with a simple script, like this: