DirMove returned fs.ErrorDirExists for any error from the destination existence check not just when the destination actually exists. That made sync silently fall back to file-by-file moves and masked the real failure. Return the underlying error instead when the check fails for any other reason.