This is a guess, but it looks like all of your normals are... well, weird.
Normally a normal is a unit vector (dot product is 1). Youve got some normals defined as (-5, 0, 0) which is odd. Since the only geometry I see is a cube (12 triangles), your normals are very likely to be either (1, 0, 0) or (0, 1, 0) or (0, 0, 1). Other normals (something like (0.2, 0.4, 0.1)) are generally created by a 3d Drawing program.
When the normal is off, the lighting calculations built into Direct3D behave oddly, including making things too dark or too light or just not having the light blend across a surface quite right (compared to whats expected - the math is working right).
I noticed that in loadGeometry, you also define 3 vectors: v0, v1, v2, and v3. Theyre used in calls to PositionNormalTextured as both the position AND normal vector. I think youll probably want only one vector for the normal. The position vector can change according to the position you need (I didnt check your code for accuracy on position though the cube does draw).
-Nerseus