The code you're using to read the normal maps from textures also looks suspicious. Your comment about "already in [0,1] range" is strange, because the correct range for each component of the normal vector is [-1,1]. Make sure you're reading them all correctly.
//Get Normals from NormalMaps (already in [0,1] range)
float3 baseNorm = tex2D(NormalSampler, input.UV * BaseTile);// * 2.0 - 1.0;
It's very handy to have debug views where you can render the normals, etc from your shaders to help sanity check the values you have to help debug this stuff
//Process VertexNormal and bring it in [0,1] range
float3 vnormal = 0.5f * (input.Normal + 1.0f);
This also looks wrong, You definitely don't want to encode the normal in the [0,1] range before normalizing the vector. this should read float3 vnormal = normalize(input.Normal);