Happens often w/ sliders, less often with text boxes.
I think what's happening is a race condition between the UI thread and the evaluation thread. Evaluate thread fetches UI value, UI thread then updates the value, and then evaluate thread marks it as clean after using the old value.
Solution: wrap evaluate thread in UI dispatcher such that UI is fetched and marked clean in the UI thread. This way, the UI updates before the evaluation (and the latest value is fetched) or the old value is fetched and the node is marked clean before the change happens and it becomes dirty again (the queue will then rerun it to get the changes).