The answer involves creating a label style which consists of reference text. Reference text is a hidden gem and can be very useful in all sorts of situations. Basically it is a component added to a label which reads information from another Civil 3D object and displays that information in the label for the current object.
So in our case we will create an alignment label that is going to reference the level from two different surfaces. The other types of Civil 3D objects that you can reference are alignments, cogo points, parcels and profiles so you can end up getting quite creative with your labels...
To start, select your alignment, right click and select Edit Alignment Labels. Make a copy of one of the existing label styles.
On the layout tab of the dialog box delete the existing components.
Now add a component as below and select Reference Text.
When asked for Type choose surface and give the component a name of 'EG Levels'.
Edit the text contents by clicking in the cell containing 'Label Text' and change this to reference Surface Elevation as shown below:
Repeat this adding another reference text component calling it FG Levels. In the text properties give this one a Y offset so the labels don't overlap.
Add the label to your alignment and set the increment as required. Now back in your drawing you should see something that looks like this:
The labels have been set up to reference a surface but we haven't told it which surface yet - this is why we see the question marks.
There is a bit of a trick to setting the referenced surfaces. If you click on a label it selects the whole set because that is what we have applied to the alignment - a label set. There is nowhere to set the reference objects in the label properties.
However, if you hold down control and click on a label it allows you to individually select a label and in the properties palette (right click and Properties) we can set the reference objects.
With a label selected click in the cell where it says <none> and move your cursor into the drawing, right click and select the surface from the list - do for both. Your label should now be referencing two surfaces.
To set the surfaces for the entire label set; select the label set, right click and isolate objects. Then hold down control and drag a selection box around all the labels, now in properties palette you can set the surfaces for all labels.
Just as an aside, the initial query I had was how to show proposed levels at the locations where the alignment crosses the existing contours. After much playing around I figured it wasn't possible without some programming but this was a suitable workaround.