Yo creo que el problema lo tienes porque el archivo de origen tiene un tamaño que no es divisible por el tamaño del buffer y escribes información basura al final del archivo destino, cuando es que lees menos información de la esperada.
Código Delphi
[-]
Var
...
iRead: Longint;
begin
...
repeat
iRead := Archivo1.Read(BytesBuffer, SizeOf(BytesBuffer));
Archivo2.Write(BytesBuffer, iRead);
until (iRead <> SizeOf(BytesBuffer));
...
Saludos!