I've been working on a code for something like the diamond-square algorithm, and I've read through the thread started by Kronikel, the webpage mentioned there by DarkBeam (
http://www.gameprogrammer.com/fractal.html), and looked at some papers by Mandelbrot on fBm and the ones by Fournier et al, Gavin Miller, and a couple of others. I haven't yet digested Mandelbrot's criticism of diamond-square from the technical correspondence section of the August 1982 volume of Communications of the ACM, or looked at the reply by Fournier et al, but I think that's probably worth doing. A paper by Lau et al (1995) on Self-Similar Traffic Generation has a section (2.3) which I think does a really nice job of explaining how the midpoint displacement (i.e., the random offset) calculation is supposed to work---a lot better job than the description on the above website!
My reason for looking at all of this is because I wanted to make sure I was calculating the random offset correctly. And I think the tent peg-effect actually does come from doing this incorrectly, because I'm only getting tent pegs when I use incorrect parameters in my model.
The correct way to calculate the random offset values is stated by Miller on pg 40 of his paper, and shown in more detail in the Lau paper I mentioned. At each iteration, you're supposed to draw randomly from a Normal distribution with mean zero and standard deviation k2^(-iH), where k is your initial scale factor and H is like the Hurst exponent in fBm. Therefore, you initially sample from a Normal distribution with standard deviation k, then you divide by 2^H, and then by 2^H again, etc., at subsequent iterations.
The thing is, H has to be between 0 and 1. With H=0, the standard deviation stays the same at each iteration (division by 1), and you get a surface based on totally uncorrelated random Gaussian noise. With H=0.5, you get a "Brownian" surface (if it's okay to call it that: Mandelbrot may roll in his grave). And with H=1, you divide your standard deviation by 2 each time you halve your length-scale. This surface is strongly correlated, since the random offset at each subsequent midpoint can't deviate from the average by more than half of what it could in the previous iteration.
The problem with the tent pole-effect, I think, is that you might be effectively using a value of H that's greater than 1, and therefore smoothing the surface too much with subsequent iterations. That's why the first set of values dominates the final image: the subsequent points are too close to the average because you haven't introduced enough randomness---and it only gets smoother with each iteration. At least this is what happens when I set H>1 in my code.
I hope this helps. Incidentally, the images that Gavin Miller generated with the diamond-square algorithm (Figure 2) also had the tent pole-effect, but I don't see the value of H he was using anywhere in the paper.