Is there an efficient way to scale UVs on many objects at once?
Well, I puttered around in the python console and bashed this script together:

import bpy
for mesh in bpy.data.meshes:
    changed = 0
    usedverts = set()
    for face in mesh.polygons:
        for layer, texmap in enumerate(mesh.uv_textures):
            tex = texmap.data[face.index]
            if tex.image and tex.image.name == 'construction-facemelt.tga':
                for v in face.loop_indices:
                    if v not in usedverts:
                        uv = mesh.uv_layers[layer].data[v].uv
                        uv.y = uv.y / 2.0 + 0.5
                        changed += 1
                        usedverts.add(v)

    if changed &gt; 0:
        print("Updated", changed, "UVs on", mesh.name)


I mostly put this together via console introspection and guesswork, so, there might be a lot of ways to do it better; I still barely understand the python blender api. But it works, and the bits to customize to make it work for another situation should be self-evident...