Thanks for all of your help everyone! I discovered the problem. The web user I was using to execute the stored proc didn't have permissions to tempdb - that's why...
I am currently putting the crosstab results into a temp table. SQL displays the results correctly with the correct dynamic column names. The ASP page just can't see the dynamic...