Merge replication uses GUID columns to keep track of unique rows.
So the delete is using the GUID value in the where clause.
The dependency on the GUID also makes it so that the system does not recognize the relationship between the two insert statements since they have different GUIDs
Also the transactions are being applied in batches, so it is likely that the second insert is being applied before the delete or in the same batch.
You can change the parameters of the merge agent and add:
-UploadGenerationsPerBatch 1 -UploadReadChangesPerBatch 1 -UploadWriteChangesPerBatch 1
and restart the merge agent
That might help.
Once the issue is cleared up you can revert to the default.