El problema es que el alcance de su tabla temporal solo existe dentro de la instrucción exec(). Puede transformar su tabla temporal en una tabla temporal "global" usando 2 signos hash -> ##tempTable. Sin embargo, me pregunto por qué está utilizando una variable @dynamicallyBuiltWhereClause para generar su declaración SQL.
He hecho lo que está haciendo en el pasado, pero he tenido más éxito al generar SQL desde la aplicación (usando C# para generar mi SQL).
Además, es posible que desee consultar Variables de tabla. He visto algunas instancias extrañas usando tablas temporales donde una aplicación reutiliza una conexión y la tabla temporal de la última consulta todavía está allí.