isso acontece devido à diferença entre o tipo de dados de geografia e o tipo de dados de geometria.
Melhor explicado com um exemplo.
declare @point1 as geography
declare @point2 as geography
set @point1 = geography::STGeomFromText('POINT (7 1)', 4326)
set @point2 = geography::STGeomFromText('POINT (7 3)', 4326)
select @point1.STDistance(@point2)
declare @point3 as geometry
declare @point4 as geometry
set @point3 = geometry::STGeomFromText('POINT (7 1)', 4326)
set @point4 = geometry::STGeomFromText('POINT (7 3)', 4326)
select @point3.STDistance(@point4)
Se você executar isso diretamente no SQL Server Management Studio, obterá 221151.479533501 no primeiro resultado e 2 no segundo.
Isso ocorre basicamente porque no tipo de dados de geografia a unidade é escolhida de acordo com o SRID fornecido. No seu caso, sendo 4326, está em metros. Então, você está pedindo a distância, em metros, entre as coordenadas (lon:7; lat:1) e (lon:7; lat:3). Volta cerca de 221 Km.
Ao usar o tipo de geometria (segundo exemplo), é uma projeção planar onde a distância funciona como seria de esperar, retornando assim 2.
Em relação ao seu código NH Spatial, parece ok. Basta fornecer o parâmetro maxDistance em metros e você deve ficar bem.