Spatial Filter is not the way to go. Think about this.
Since in ArcObjects (unlike in Oracle Spatial or PostGIS) there is no way to do a real self join, you are left with having to create a Spatial Query for each point feature and check for intersection. n spatial queries where n is the number of features!
If you did this your time complexity would be O(n) (the cost for looping through every feature) * O(log n) (the cost for searching through the index - and at "log n", I am actually being too kind because the ESRI index is a multi-level grid - not an Rtree).
To get an idea how slow it degrades over time, take a look at this graph.
X is the number of points. Y is the number of comparisons (worst case) using the SpatialFilter approach. 250 points, with the approach I describe below, will be done in 250 comparisons. With the spatial filter approach, the number of comparisons shoots out of the chart (i.e, as the problem size increases, it gets slower really really fast).
If you are not shocked yet, you should be.
Another example is that with 1000 point features, the approach below will be done in 1000 comparisons. With the SpatialFilter approach, you would need ~9965 comparisons. That is 9x slower.
Don't use the spatial filter approach for finding duplicates.
Add a 200,000 features and prepare to wait for several hours (or even days) for something that should take minutes instead.
Better approach is to:
Easy approach, much better than what you would do without having the luxury of joins.
Yes, the space complexity is O(n) as opposed to O(1) for your first approach, but in this case I would not be concerned and we could get into all kinds of other discussions that would last forever :)