The Application Pool recycling is causing the ThreadAbortException because it's closing the pool. Regardless of anything the pool process will be terminated and restarted. Code within the pool cannot prevent this (ThreadAbortException is special in that it can be caught but not consumed).
The startMode="AlwaysRunning"
just means that the pool will always be available. It makes no claims about which pool process that is (so after a pool process is terminated it will automatically fire up another one; or that if IIS is restarted it will automatically fire-up w3wp.exe).
Remove the 3-minute recycling cycle time length. I don't see how it benefits testing anyway (as whenever an ASP.NET application is modified IIS will restart the AppDomain).