Hey, thanks for the images. The lighting in the first one shows your problem much clearer for me.It looks like your normals are incorrect. For terrain normals I take the height sample x,y and compute the normal for that sample with:
float h0 = GetSample( x + 0, y - 1 );
float h1 = GetSample( x - 1, y + 0 );
float h2 = GetSample( x + 1, y + 0 );
float h3 = GetSample( x + 0, y + 1 );
normal.x = h1 - h2;
normal.y = separation; // separation = distance between samples (I use 1.0f).
normal.z = h0 - h3;
If that doesn't help, perhaps posting your normal calculation code?
Are you using y-up for your normals, but z-up for your sample locations in this response?
EDIT: Also, I think your y value for the normal should be 2 * the separation. According to this post, at least http://www.gamedev.net/topic/163625-fast-way-to-calculate-heightmap-normals/