This is intended. fread
always reads from the file's current read pointer and advances that same pointer, so you can a file in sequential chunks without having to explicitly seek.
You shouldn't have to read the same chunk twice in a row. What you're checking this way is whether some other process has changed the file in the meantime, and if one has, then your program will erroneously report that the copy failed.