Stop-WebAppPool only requests a stop - the w3wp.exe worker process can
keep running for a few seconds afterwards, still holding the site's
files open, so the previous fix (stopping both sites before the wipe)
wasn't sufficient on its own.
- Wait-AppPoolFullyStopped: polls app pool state until Stopped (30s
timeout), then force-kills any lingering w3wp.exe for that pool
- Remove-DirectoryContentsWithRetry: retries the wipe a few times with
a short delay, since file handles can take a moment to release even
after the worker process is confirmed gone