With GL_CLAMP_TO_EDGE, your shadow texture will get first and last pixel repeated in each dirrection, wich leads quite unpredictable results
if you clamp to border and set border color to (1,1,1,1), you'll get clean border but without shadow at all.
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapS, (int)TextureWrapMode.ClampToBorder);
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapT, (int)TextureWrapMode.ClampToBorder);
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureBorderColor,new float[] {1f,1f,1f,1f});
Extending your Projection size is the only way to have shadowing as expected on the whole scene (orthographic example where lightSize is the relevant size.):
lightProjection = Matrix4.CreateOrthographicOffCenter(-lightSize, lightSize, -lightSize, lightSize, lightZNear, lightZFar);
but doing this you loose resolution on your shadow map, which have to be filtered with some common techniques, see 'soft shadow filtering' like pcf.
The step forward is than to use technique like 'cascading shadow' to handle multiple shadow map resolution depending on the scene distance...