If you write a new value to the timer, it will only update the duty at the next update event - top or bottom. So if you write it in the "top" interrupt, it will get applied at "bottom".
If you are reading every "bottom" of timer, you then get the injection you want... it you are reading at top...