I would use Profiler to see what is going on. Run it on both machines, and make sure that you include the events Error:Exception and Error:UserMessage. Also include SP:StmtStarting and SP:StmtCompleted. You would need to figure out how to filter the traces, so that you get the correct level of information. Best if you can repro the problem in a test system, since running Profiler and capturing events on statement level can cause performance issues if you do it in production.
By the way, a better way to do the above is do
SELECT @sql = 'SELECT colunm1, column2 FROM dbo.tbl'
SELECT @sp_executesql = quotename(@server) + '.' + quotename(@DBA) + '.sys.sp_executesql'
INSERT #tmp(col1, col2)
EXEC @sp_executesql @sql
This will not resolve the issue, but it is a cleaner way to do it.