1 - Table varaibles are a very viable solution. You may have found one of the few exceptions there but I would NOT stop using just yet.
2 - You didn't post the actual code so I can't spot the problem with what you supplied.
3 - Why are you not doing a single update statement to update all 100 rows in one batch?
Everyone is right - post the entire code and it will be much easier to assist you.
By any chance, are your dev and test servers single-processor servers or some kind of VMWare, and your production server a milti-processor system?
Lastly, the comment about avoiding a cursor is strange. They would be typically avoided to improve performance (SQL is not great at looping). This procedure, however, avoided it by using a looping process that is most likely slower than a cursor. I am curious as to what you were trying to avoid.
Aside from posting the actual code could you post the results of:
select @@version
from you dev, test and prod SQL Servers ?