IIS pings a worker process periodically (by default, every 30 seconds) to make sure it is still responsive. It is possible that your worker process is too busy to respond to the ping, so IIS tries to terminate it. When IIS tries to terminate the process, it fails, because the process is still hanging on to areas of memory.
Go into IIS, click Application Pools, then right-click on your app pool and choose Advanced Settings. Under the Process Model heading, choose False next to Ping Enabled and see if that fixes the issue. Another option is to increase the Ping Maximum Response Time.
As for whether or not this signals a larger problem, I would say yes, it does. It doesn't seem appropriate for that type of code to execute synchronously. You might want to consider passing the task off to a Windows service that will do an async callback, or investigate IIS's async model (System.Threading). How to do that would probably be a better question for stackoverflow.