No, that's pretty much it, if you want to keep it simple anyways (without getting into CRCs, parity, checksums, and a dozen other error correction methodologies)...
If you add everything up and compare it to a checksum, it might happen that one data BYTE is one high and another one is one low, thereby cancelling themselves out.
But, just so I've got this straight... You send address1 twice, address2 twice, and the same keydata 6 times, correct? If so, then, yes, I think the overall best way to make absolutely sure everything is good is to compare everything to everything else. If they all compare good, then you're all good...