Las tablas temporales se crean en la Tempdb, y a menos que se indique lo contrario, heredan el valor de COLLATE o juego de caracteres de dicha base, es en esta posible conversión de caracteres donde se producen los problemas. Hay dos opciones, forzar la creación de la tabla temporal a un COLLATE específico, o bien que herede el COLLATE de la base de datos desde donde se esta creando la tabla.
Opción 1
Código:
create table #t1 (id numeric(8), data varchar(30) collate Modern_Spanish_CI_AS)
insert into #t1 values (1,'data1')
select * from #t1
drop table #t1
go
Opción 2
Código:
create table #t2 (id numeric(8), data varchar(30) collate database_default)
insert into #t2 values (2,'data2')
select * from #t2
drop table #t2
go
En lo particular, prefiero la opción 2, ya que tu aplicación podría soportar varios COLLATE y si ese es el caso, no tienes que preocuparte por modificar el código.
Nota, esto también aplica a los tipos de datos TABLE.
Saludos