It's something I've seen a few times over the years, the upper blocks of image go AWOL. They look fine on the camera, but it's gone during transfer. Someone cleverer than me put it down a corrupted file index, so the data is there, software just doesn't know how to display it. Presumably, such files would have a different checksum.
Some software is more tolerant than other and will attempt to rebuild the index, but it's a case of trying several different applications.
I've no idea why, it seems to happen in the act of transfer. I've seen similar stuff with video, again mis-indexing, also during transfer. In my experience it's always involved cables, but that's anecdotal.