When a node wants to join a cluster, NiFi calculates a fingerprint of the flow. This is largely a concatenation of the flow.xml.gz but with certain elements (such as processor position) removed so that small, inconsequential changes can be ignored. This fingerprint is then used to determine whether or not a node is allowed to join the cluster. If the node's flow fingerprint matches that of the cluster, it is allowed to join (assuming permissions, etc. are in good shape). If the fingerprint does not match, it is rejected. If it does join, those small changes such as Processor position are reconciled by updating the node to match the cluster's flow.
Apparently, though, Controller Services at the Controller level are included in the fingerprint but Controller Services defined within a Process Group are not. This means that if a node has the wrong value for a Controller Service property, it could still join the cluster and behave differently than the rest of the cluster.