This is a fun question.
It's not unrealistic that you get a large performance improvement by changing from "<>" to ">".
As others have mentioned, the trick is to get the most out of your indexes. Certainly by using ">", you should easily get the server to limit to that specific range on your PK - avoiding looking "backwards" when you've already checked looking "forwards".
This improvement will scale - will help as you add rows. But you're right to worry it won't help prevent any increase in work. As you're correctly thinking, as long as you have to scan a larger number of rows, it will take longer. And that's the case here because we always want to compare everything.
If the first part is looking good, just the TOL check, have you thought about splitting out the second part entirely?
Change the first part to dump into a temp table as
SELECT
PointA.ObjectId as ObjectIDa,
PointA.Name as PTNameA,
PointA.[Description] as PTdescA,
PointB.ObjectId as ObjectIDb,
PointB.Name as PTNameB,
PointB.[Description] as PTdescB,
ROUND(PointA.Geometry.STDistance(PointB.Geometry),3) DIST
into #AllDuplicatesWithRepeats
FROM CadData.Survey.SurveyPoint PointA
JOIN [CadData].Survey.SurveyPoint PointB
ON
PointA.Geometry.STDistance(PointB.Geometry) < @TOL
ORDER BY ObjectIDa
And they you can write the direct query that skips duplicates, below. It isn't special, but against that small set in the temp table it should be perfectly speedy.
Select
*
from
#AllDuplicatesWithRepeats d1
left join #AllDuplicatesWithRepeats d2 on (
d1.objectIDa = d2.objectIDb
and
d1.objectIDb = d2.objectIDa
)
where
d2.objectIDb is null