This one was a doozy and I'm not sure I got it. I started with trying to replicate in purest terms what you were seeing: incorrect STDistance() between two geography points.
DECLARE @zipcode geography
DECLARE @searchpoint geography
SET @zipcode = geography::STPointFromText('POINT(-97.17340 35.48330)', 4326);
SET @searchpoint = geography::STPointFromText('POINT(-97.17340 35.48330)', 4326);
SELECT @zipcode.STDistance(@searchpoint)
The results is, correctly, 0 meters (SRID 4326 uses meters as the distance unit), so I kept scratching my head. The only thing I noticed that I can't replicate is this: you flipped between geography and geometry (your code from question):
SET @Geog = geography::STGeomFromText(@GeogTemp, 4326)
When I plopped that into my code I still got 0 for distance. So my only question, and perhaps you could post the T-SQL, is about your spatial index. I think the STDistance() calculation is going to use the index. So without seeing the index and knowing that you hopped between Geography and Geometry at least in this instance, I'd wonder if the odd results are in there since I can't replicate it with my above code.