Because robocopy doesn't use standard return codes. It doesn't actually fail, but the command line interprets its return code as a failure. See this Robocopy return code reference.
What you need to do is wrap robocopy and interpret the return values like this.
"a-sync" : {
"command" : {"Fn::Join" : ["",[
"(robocopy c:\\latest c:\\inetpub\\", {"Ref" : "Name"}, " /MIR) ^& IF %ERRORLEVEL% LEQ 4 exit /B 0"
]]},
"waitAfterCompletion" : "1"
},
This is cut and pasted from a sript that works, so you'll need to change the parameters - but the key part is to wrap the robocopy command in parenthesis, and at the ^& IF stuff at the end.
Effectively it's converting all the success return codes from robocopy into a success code recognised by the OS.