Under display properties, when you make a dictionary field "hidden", the default is to also mark it as "editable on server side only". This will prevent a rule from updating the value. Be sure to uncheck this option and your rule should work fine. Or execute your rule on submit/server side.
"Editable on server-side only" was not shown as checked, but it still was not able to update the field via rule on form load.
This was after upgrade to 10.0, for something that was working before, so it might be something caused by the upgrade. Since "Editble on server-side only" did not exist in our old version, is it possible that during the upgrade it enabled that by default for hidden fields on the back-end somehow, even though in the UI it was still shown as unchecked?
After changing the Input Type to something else, and then back to hidden, and unchecking it again (since it checked by default when changing back to hidden), now it is working ok again as hidden field, so it appears that setting needs to be "reset" somehow.
Hmm... I thought it was working if I "refresh" the settings as I outlined, but it does not actually.
It seems if the field is set with display type of 'hidden', conditional rules cannot update the field value, even with the "editable on server side only" check mark cleared. If the display type is set to 'read-only' for example, and then hidden by a rule, then another conditional rule can update the field's value, so the rule itself appears ok as well as access control.