To answer your question, yes, SQL Server keeps track of that. That is the promise of snapshot isolation: you get consistent picture of the database of how it looked when the transaction started. How it keeps track? It adds 14 extra bytes to the row, and these 14 bytes includes the LSN, which it can compare with the LSN for your transaction.
Now over to the bad news: your scheme is not going to work out, but you can miss updates.
Say that when you start @latest_version is 0x0000A000 and @@SuzyMc67 is 0x0000B000. Say furthermore that when your transaction starts, there is a new row in C where the rowversion value is 0x000C123. However that row was not committed when your transaction started, so you will not get it next round. And next round it is below the high-water mark.
I've worked a bit with getting changes by using rowversion columns as a high-water mark. Or more precisely, I had to, because some colleagues thought it was a bright idea, but they did not understand what they were doing. Any form of snapshot is a no-no, since you can miss updates. But also without snapshots, it's precarious. I recall that I recommended my colleagues to first run a query that got the changed ids from the index of the rowversion column. That improved things, but I think that for really high-frequency scenarios it still broke down. (But they tracked the high-water mark per table, rather than using @@SuzyMc67 , which I think is a little safer.)
And that is the key thing. The less common updates are, the lesser the risk that you miss updates. But, still, nope, do not use snapshot. If you need snapshot - I think an upgrade is the only solution. For Change Tracking, snapshot isolation is recommended.