Constraining vertices in the Z axis when array, curve and shrinkwrap modifiers applied
I managed to solve the problem by using the shrinkwrap modifier on the bezier so it followed the terrain, then I simply applied the road section to the bezier using the array and curve modifiers.
Set the bezier twisting setting to 'Z-Up'.
It was necessary to hit 'apply' to the shrinkwrap modifier on the bezier, otherwise the road simply followed it in 2D.
I hope that helps someone.