Сразу не спросил - вы вызываете метод CopyFile из класса WinApi или написали собственную оболочку для него?
Дело в том, что в реализации WinApi сделано так
X++:
if (_copyFile.call(fileName, newFileName, !overwrite ) == 0)
return WinAPI::getLastError();
return 0;
т.е. из метода будет возвращен код ошибки при неудачном вызове. При удачном - 0.
Т.е. получается перевернутая схема возвращения значения.
Если у вас своя реализация - приведите ее.