The "When a control is changed" rule fires during form load instead of when a user makes a change.
The behavior is expected. When the form loads initially the control will be empty. As the data is loaded, the control changes from empty to populated. This will cause the "When a control is changed" rule to fire.
You can use advanced conditions on the "When a control is changed" rule to evaluate whether or not the rule should fire.
If a control does not already exist on your form that you can validate against, you can add a hidden data label to your form. At the end of the form initializing rule, use a "transfer Data" action to move a specific value (such as "initialized") into the data label.
When the Control is Changed, check to see if the hidden data label contains a specific value (Initialized). If so, then continue with rule execution.