Thanks for the feedback! I tried removing -c but it doesn't work. Even if I remove all of the flags except for -r it still fails.
Your comment got the creative juices flowing in a different direction though. I ended up changing the command to use robocopy instead of cp and it finally worked.
my @args = ('robocopy', '/mir', $self->{publicDir}, $oldPublic);
Most of my perl code is written for linux so maybe this was a rookie mistake trying to run cp using a system command in a perl program run in windows.