The following seems to work. I am sure the kind FEniCS developers provided us with a shorter way to do the following, but I am not aware of it yet.
from dolfin import *
mesh = Mesh("mesh.xml")
boundaries = MeshFunction('size_t', mesh, "mesh_facet_region.xml")
boundarymesh = BoundaryMesh(mesh, 'exterior')
# copy the meshfunction, but defined on the boundarymesh this time
bdim = boundarymesh.topology().dim()
boundary_boundaries = MeshFunction('size_t', boundarymesh, bdim)
boundary_boundaries.set_all(0)
for i, facet in enumerate(entities(boundarymesh, bdim)):
parent_meshentity = boundarymesh.entity_map(bdim)[i]
parent_boundarynumber = boundaries.array()[parent_meshentity]
boundary_boundaries.array()[i] = parent_boundarynumber
submesh = SubMesh(boundarymesh, boundary_boundaries, 0) # works
I only tested this briefly, but it seems to work. If it turns out to be wrong I will change this answer accordingly. If anyone comes along with a shorter solution, I'd be happy to mark it as an answer.