But then this requires interested parties to know exactly what the data is to verify it.
Exactly. If you don't have that data, then there is always no match.
So how would somebody in the public discover a commitment?
If some node received some old transaction, and then it receives the new one, then that node can check, if the old transaction is committed to the new one. If it is, then things are replaced. If not, then it is possible to create some "first-seen" rule, and reject it.
Would it be something like Silent Payments where all incoming transactions must be parsed to see if they have a commitment value?
You don't have to check everything. If Alice->Charlie is the first transaction you see, then Alice->Bob and Bob->Charlie will have lower fee, so they will be rejected upfront, because of that. However, if you see Alice->Bob transaction and Bob->Charlie transaction first, then Alice->Charlie is a double-spend from your perspective. And then, you can check that commitment to see, that it was intended by the user.
And what's to stop a person from making an invalid commit?
The same, what's to stop a person from making an invalid transaction. Commitments are hard to match, and easy to non-match. You need exactly the right data in the right format, to have a match, in all other cases, the node will use the rules which exist today. Which also means, if commitments will not be standardized, then there will be a lot of non-matching cases, and then nodes will behave as today. So, if you want to have any node policy, then you are forced to standardize it, and stick to some upfront-agreed format, because in other case, you will have non-match, and treat invalid commitment in the same way, as empty commitment, or no commitment at all.
Maybe by using the data to make a hash for the r-value for the first RBF transaction, then using that r-value to make a new r-value for the next transaction, etc.
In general, I can imagine it in a tree-like structure. Which means, if Alice->Bob and Bob->Charlie will be joined into Alice->Charlie, then of course Alice->Charlie and Charlie->Daniel could be later joined into Alice->Daniel, if it will be unconfirmed for a long enough time. Which means, it is possible to build quite long chains. And to make things simple, it should be tree-based, to access each participant with logarithmic complexity, instead of linear.