Currently, whenever a base layer is changed, all layers are redrawn. In Map.setBaseLayer, by setting this.zoom = null, the zoomChange flag is raised with the subsequent setCenter call.
I don't know enough about the commercial layers to be sure, but it seems to me that all layers only need to be redrawn when the resolution/zoom relationship changes with the change in base layer.
If that is so, it seems like the this.zoom = null line could be made a bit smarter (comparing for the resolution/zoom relationship in the old and new base layers).
Also, the above would be easier if you could do something like Layer.getResolution({zoom: zoom}) - but I can't tell if that idea makes sense to anybody else. (Allowing for options to be sent to the getZoom, getExtent, getResolution functions instead of getResolutionForZoom et al.)