The "problem" is to do with web.config inheritance. Your new virtual application is still inheriting from the site's root web.config despite being physically separated and so it is finding this reference to a resource that doesn't exist in the new application.
SolutionLet me introduce a little known attribute of the location element in configuration files. It is called inheritInChildApplications, which can be set to false and will do what is says on the tin. Simply place them around the settings you do not want inherited by your child app. Unfortunately you can only use it in quite a blanket fashion, i.e. you can put it around <system.web> but if you think you're putting it around individual settings then you must be crazy!
So for my problem with a nonexistent HttpModule I will need to stop the system.web and system.webServer inheriting in my child app:
<location inheritInChildApplications="false"> <system.web> <!-- various web things --> </system.web> <system.webServer> <!-- various web server things --> </system.webServer> </location>