I'm having the exact same issue. It would be good to know if you figured this out.
Is this purely an Xcode issue with how the test environment creates the test receipts?
I've written my code to check for multiple IAP receipts for the same product (in the case of a purchase-refund-purchase cycle) but judging by the fields present it seems like maybe the receipt for the non-consumable IAP gets updated with the latest purchase ID and dates. This would suggest the right thing to do would be to check the cancellation date against the purchase date.
Have you tried this in a production environment?