After testing this with a very generous timeout for each deletion, I determined that it is not likely to be a login limitation. I had a failure on the same site as my original run. This led me to take a look at server directly to make sure that site existed. It did but I noticed that the site name was different than the siteId. Site Name was Sales Sample and siteId was SalesSample. I had been using the site name in the site_id = portion of the TSC code. To correct this, I grabbed the URL_Namespace field from the postgres tables and swapped that in where I had been using Site Name. This worked flawlessly.