Compares the wrapped section value, NOT wrapper identity. Two
distinct wrapper instances around the same Section value must be
equal — otherwise TreeNode.== (which delegates to data.==)
would always report data as changed on every sync, forcing
TreeSyncController to fire updateNode for every retained
section header on every rebuild.