Hi Tuomas,
This wasn't there this morning but I've implemented one of the cases (pulling out the top and bottom maps). The result is in the extrusion_extraction branches of both PyOP2 and Firedrake. The 2d->3d operation would be rather similar except that you'd have to interrogate the fiat_element on the extruded Function in order to determine which extruded nodes are "on top of" the 2d nodes you have. Unfortunately I won't have time to do that one soon (huge amounts to do before SIAM CSE next week) but feel free to have a try and complain when it doesn't work!
Cheers,
David