Why is this intended behavior? As it stands now, for example, if your controller is just about to hit RCL7 and gets downgraded you're in much better shape than if your controller had just passed RCL7.
Example:
Controller is RCL6 w/ 3.5m (out of 3.6m) progress towards RCL7
-> Downgrade to RCL5 w/ 3.5m (out of 1.2m -- 291%) progress towards RCL7
-> upgradeController() once
-> Upgrade to RCL6 w/ 2.3m progress towards RCL7
Next example:
Controller is RCL7 w/ 100k progress towards RCL8
-> Downgrade to RCL6 w/ 100k progress towards RCL7
-> upradeController()
-> Still RCL6 w/ only 100k progress
Obviously we should be avoiding controller downgrades, but the current mechanics are a little weird. Perhaps progress should be scaled down to match the lower RCL. So in the first example, you were 97% of the way to RCL7. When it gets downgraded you could then be 97% of the way to RCL6, or 1.1m.