I was able to reproduce the issue (after some smaller modification to the scripts. The first script lacks BEGIN TRANSACTION, the other has a COMMIT too many).
This is my analysis of what is happening. In my test the plan for the DELETE was a MERGE JOIN of CI scans on the two tables. TABLE_A is accessed from the version store the normal way. For TABLE_B on the other hand, SQL Server wants an UPDATE lock. An UPDATE lock is a read lock which can only be held by one process. This sort of lock is taken when SQL Server is about to update the resource. If the update actually happens, the U lock is converted to an X lock.
If the INSERT transaction is in progress, this means that the scan over table A can still be carried out, since it runs over the snapshot. But the scan over table B is blocked by the transaction. The net result is that the result of the two scans are inconsistent.
I know of other anomalies that can occur with RSCI. Say for instance that a the procedure to deregister a product checks that there are no open orders for the product, and the procedure to add an order checks that all products are active. If they execute simultaneously, the business rules can be validated, because both procedures are reading data that is in fact stale. This is one I have not seen before or thought about.
There are at least two ways to skin the cat in your case. One is to use true snapshot isolation for the delete operation. When I tested this, no rows were deleted. The other solution is to use the hint READCOMMITTEDLOCK:
delete
from TABLE_B
where SOME_PK not in (select SOME_PK
from TABLE_A WITH (READCOMMITTEDLOCK));
Here you are telling SQL Server that you don't want to use the snapshot in this case.