because temp tables are transient you will really have to catch this exactly as it creates the problem.
I might think about monitoring tempdb for any table over 5GB (a guess) and then trying to find the SPID... once you have that then you can use either dbcc inputbuffer or sysprocesses to capture the process
You could just run a job/loop to check for the biggest temp table, but I wonder if there is an XE that you can use... it bet Grant Fritchey will have an answer for you within minutes, he is the king of XE