Yeah - you have to be diligent: many items which are created in one catalog with..do call can not be used until the with..do method returns. For example you can't use freshly created keywords either..
I use a "recursive" catalog update method which works around this problem, which you can find in the framework folder of any of my plugins, but without such a method you just have to call with..do twice.
+1 vote for less of these limitations, but also I wouldn't hold breath for big changes in this area any time soon - I assume it's something very entrenched in database access methodology.. - hope I'm wrong.
PS - the documentation is pretty good about letting you know when you can expect problems like this, so if unsure: read the doc; and of course check return codes religiously..