Neil,
Do you use ArcGIS? If so, do you have licensing for 3D Analyst? I've been using the georeference tools in ArcMap to adjust x/y values. I've been using an Raster Interpolation process (Spline with Barriers) to create an error surface from GCP locations and adjust z values. In order to use the following process, you should have at least 10 GCPs.
Here is an instructional video about how to use the georeferencing toolbar in ArcMap: https://www.youtube.com/watch?v=PHtxbpboDro
For adjusting your X/Y values: Use your aerial photo to create a reference table within the georeferencing tools. Create control point links from your aerial photo's GCPs to your actual GCP points. Make sure your snapping tool is on so you can snap to your GCPs. Once you have linked your aerial photo GCPs to your GCP points, open the link table and save it for adjusting your DEM. Select your DEM in your georeferencing toolbar, load the table you saved from the link table. At the bottom of the link table, select spline. In the georeferencing dropdown menu, in the georeferencing tool bar, select Rectify and save the X/Y adjusted DEM.
For adjusting the Z value: Use your same GCP locations and add an "error" attribute to the dataset. Populate the error attribute with the error (DEM elevation minus GCP elevation at the exact location of the GCP). Input these points and an extent polygon that matches the extent of the DEM into the Spline with Barriers tool to generate your error raster surface. Once your error surface is generated, use 3D Analyst/Raster Math/Minus. Put your DEM into Input 1 and your Error Surface into Input 2 (DEM minus Error Surface) and the result will be a corrected Raster Surface.
If you don't have ArcGIS, you may be able to do all of this with QGIS, which is free.
Hopefully this helps. If you do not have ArcGIS, let me know if you are interested in having me do this for you. I will do it for free the first time.
Mark Heil - Terradynamics GIS, LLC