Your process was involved in unresolved deadlock, therefore, the tables were not dropped and blocked the creating table process in tempdb.
This might be the bug in sqlserver 2005.
create proc proc1
create table #abcd ( i int)
drop table #abcd
DECLARE @I INT
SET @I = 1
WHILE @I < 5000
SET @I = @I + 1
Select count(*) from tempdb.sys.tables
If you notice the last output, the tempdb now has 5000 temp tables. From a programmer perspective, as soon as a stored procedure finishes, the temp table scope is over and it is destroyed. In SQL2005 we do a deferred drop, but that doesn’t kick in until transaction is over.
Because of the begin tran command, the temp tables are not dropped and hence tempdb locks not released. However, these tables are no longer accessible even to the SPID which created it, but are still present in tempdb.