Solved. My problem seemed to be a combination of script order (as you suggested) and unique names. For future reference:
I was using "set_dont_touch" too early, but even after moving it later in the script, I still ran into a problem during floorplanning involving unique names. Without the set_dont_touch command, the original "adder" module is uniquified such that adderInst1 is an instantiation of "adder_0" and adderInst2 is an instance of "adder_1". The problem is that after set_dont_touch, both adderInst1 and adderInst2 were instantiations of the same module called "adder_". I fixed this by following set_dont_touch with an explicit uniquify:
set_dont_touch [get_cells adderInst*]
uniquify -cell [get_cells adderInst*]
Thanks for your help!