Thanks Jaime for the tests and bug reports. I'm attaching an add-on patch which fixes these issues for me. I'm deliberately not sending a fresh revision because the changes are still minor.
Per Alvaro's request in another thread, I've rebased these patches on his patch to refactor HeapSatisfiesHOTandKeyUpdate(). I've also attached that patch here for easy reference.
The fixes based on bug reports by Jaime are also included in this patch set. Other than that there are not any significant changes. The patch still disables WARM on system tables, something I would like to fix. But I've been delaying that because it will require changes at several places since indexes on system tables are managed separately. In addition to that, the patch only works with btree and hash indexes. We must implement the recheck method for other index types so as to support them.