at the very least, I'd alter the process you use to copy the new modules dir into something like $puppetconfigdir/modules_MMDDYYSTUFF and then doing 2 mv's:
mv modulepathdir modulepathdir.old
mv modules_MMDDYYSTUFF modulepathdir
and then puppet should be good, you can start the rm -rf on module path.old
that way at least you're minimizing the number of iops that must occur between when you've gotten the old modules out of the way and you've gotten the new modules into place,
Normally, when I do deployments I restart the puppet master gracefully, (apache/nginx/whathaveyou) to make sure that files aren't cached, although the only problems I've actually encountered here involve having a vagrantized puppetmaster .having issues with apache+sendfile