Another simple smoothing algorithm to try is where the scale is multiplied by a factor related to each vertex's angle deficit (curvature), ie.:

vertex[i] += displacement[i]*scale*((2pi - total_angle[i])/(2pi)).

This should smooth out spikes and pits, but leave ridges, valleys and flat regions relatively untouched -- which seems ideal for the task at hand.

Not sure what the algorithm's called, nor how much it would differ from the curvature normal weighting, but will try later today.

Update: implemented as suggested, it doesn't work entirely as expected, but will try other things related to it.