Судя по твоему сообщению Transient создаются в рутовом скоупе. Это не так. Видимо ктото создавал их в рутовом, поэтому так вышло.
Я сейчас уже не очень хорошо помню, но, кажется, было так. Class1 получает в конструкторе Class2. Class1 это per-web-request, Class2 это transient. Class1 создавался при каждом веб-запросе, Class2 тоже создавался при каждом запросе. Class1 не был IDisposable, Class2 был. Экземпляры Class2 оставались висеть при закрытии скоупа веб-реквеста, то есть они создавались в корневом.