Il commento di Joe Zack è ciò che mi ha aiutato a capire cosa sta succedendo qui. Una spiegazione molto chiara e concisa. Questa dovrebbe essere una risposta in modo che sia più visibile alle persone che arrivano qui da una ricerca su Google.
SqlCommand chiama sql con parametri tramite sp_executesql quando ci sono parametri, il che significa che la tua tabella temporanea viene creata all'interno (e quindi ripulita) in una stored procedure, quindi non è disponibile per chiamate future, anche quando condividono la stessa connessione