Temp table lives after being explicitly dropped
Try putting a batch separator (GO) command between the SELECT/DROP/SELECT

GO signals the end of a batch of Transact-SQL statements

SELECT *
INTO #tmp
FROM dbo.SourceTable1
WHERE 1 = 0

GO

DROP TABLE #tmp

GO

SELECT *
INTO #tmp
FROM dbo.SourceTable2
WHERE 1 = 0