The root cause is the cdc column, which is included in schema version calculation in RowIterators.digest() via SchemaKeyspace.calculateSchemaDigest().
It is possible to make the schema-version calculation between 3.0 and 3.11 compatible. The idea here is: 3.11 accepts both 3.0 compatible and 3.11 "native" schema versions. As long as there is one 3.0 node in the cluster, 3.11 announces a 3.0 compatible schema version (without the cdc column). When there are no (more) 3.0 nodes in the cluster, announce the "real" 3.11 schema version (including the cdc column). "Announce" means announcing via Gossip and storing in system.local.
The change itself is against 3.11 only. A couple of log messages have been improved and some code regarding schema version checks has been moved into the Schema class. Those "side changes" are carried to trunk. Because of that, the 3.11 and trunk branches are different. The "real" change is in the 3.11 branch.
NEWS.txt for 3.11(only) contains upgrade notes.
We've verified the functionality of the patch by usual CI tests and extensive tests using the new upgrade dtest.