I had a sync issue which took me a while to sort out, it turned out to be that some contacts were syncing with gmail instead of iCloud. I can't quite recall how that happened but once I sorted that out, it was a simple fix. It wasn't immediately obvious and I can't recall the exact details but maybe it's worth you checking this possibility out.