Well, again, I think the issue is with it being secondary data. At what point is a 2ds field considered to have changed? Not on query, right? Because that is when the data is loaded, so I'd think that would be considered its original state. And to run a rule off the field itself, the field has to change. Obviously, this would be easy in code -- run the query, loop through the returned values, update them all to a substring. No issues there.... But in rules, I think it becomes a lot more difficult, because you have no way to really "loop" through the returned nodes....
Of course, I had to go test this....So, I created a form, added a data connection to a list, added a rule to one of the fields to show a message box. I added a button to query the list. Querying (initial fill of the data source) doesn't trigger my rules. Changing a field does. Requerying AFTER changing a field does NOT.
Again, pretty trivial in code, but I'm not seeing how to do it in rules. qRules has a SetValue command -- that might be able to handle this, if a field with a counter that could be used to trigger the logic was added to the form (since we have to run the SetValue command for each row returned from the secondary data source).