I have been trying to figure this out for years and it is what caused me to create my first and last infinite loop in workflow. Since then everyone I see who creates an infinite loop does it for the same reason, they don't believe they are creating an infinite loop.
Is it logical that the activity retrieve field values is a change operation, rather than a read operation.
Situation.
Customer creates a workflow that retrieves field values from the starting entry.
Customer creates a starting rule for on entry changed and does not exclude the workflow service account.
We train them not to do this, but have no logical explanation of how it is an infinite loop. For it to be an infinite loop, workflow would have to change the metadata.