You really need to get and view server applications and system events and HTTPERR logs for the period when the server reported these errors.
Without this, it would be difficult to guess what was the main cause of the problem.
Update:
The OP is incorrectly marked with its question, so the next section no longer applies. However, I will go away because I think that this information is useful for those who are faced with these problems and may be thinking about switching to IIS7.x.
You are correct that running two different .NET Framework in the same application pool can lead to these errors, but this is what you usually see in Windows 2003 / IIS6, and not in Windows 2008 / IIS7.
IIS7 takes a slightly different approach to indicating which version of the .NET Framework is loaded and is determined by the property of the managedRunTimeVersion application managedRunTimeVersion . When requests are processed by IIS / ASP.NET, the preCondition attribute is used to map the site handler to determine when to load the handler of the required value (which is similar to the script mapping in previous versions of IIS).
This mechanism prevents the loading of an incorrect execution version into the application pool workflow.
So, if the application pool is configured to run the version of the .NET Framework version 4.0, then only this version will load, even if your application is created against v2.0.
There's a great article on how this works here:
Achtung! IIS7 Prerequisites
About halfway through the Handlers section explains why the risk of accidentally loading the wrong version of .NET into a pool is mitigated by the preCondition function.
Server issue. An inaccessibility error usually means that something catastrophic has happened (for example, loading the wrong ASPAP filter of the ISAPI version into an already running workflow).
Not closing SQL connections is unlikely to cause this type of serious error. Most likely, you will see a yellow runtime error screen, if so. Starting from SQL connections does not usually bend ASP.NET so that the entire structure is itself a vertex.
My main suspect would be a permission issue when the application pool identifier was unable to correctly access the application folders. But this is just a hunch.
Again, you need to get application and system logs and HTTPERR logs (they are in %systemroot%\System32\LogFiles\HTTPERR ). It will contain clues and facts about what went wrong.
Update 2:
On Windows 2003 / IIS6, if you have two applications with different versions of ASP.NET that are in the same pool, you will get this error. In my experience (I work in a web host) this is the main reason for this notorious error page:

The control event is also recorded in the application event log:
Event Type: Error
Event Source: ASP.NET 2.0.50727.0
Event Category: None
Event ID: 1062
Date: 01/12/2011
Time: 12:31:43
User: N / A
Computer: KK-DEBUG
Description:
It is not possible to run two different versions of ASP.NET in the same
IIS process. Please use the IIS Administration Tool to reconfigure your
server to run the application in a separate process.
Although your root application cannot be written in ASP.NET, it is likely that something started loading another version of the framework into the application pool of your site.
- There is a rogue
web.config root ... this will cause ASP.NET to load - there is a lookup mapping in ASP.NET 1.1 on the sitemap script (less likely, but possible)
I am inclined to think that your new application probably fell into the pool, where other sites or applications ran a different version of the framework. The only way to find out is to get the application event logs and see the event shown above.