The use of LEN:
where ((RespondDate is not null) or (LEN(RespondDate) !=0))
implied that the RespondDate column is a VARCHAR or NVARCHAR field - and that's probably a big part of your problem: string comparisons are resolved by comparing the first pair of different characters in the two strings, all other characters are ignored. So if you start looking today and use a European data format by default on your fields, you sill find every date where the day of the month is less than 27 (because today is the 26th.) Month and year will be ignored.
If they are, then change your DB and store values in appropriate datatypes: numbers in INT FLOAT, or DECIMAL, dates in DATE, DATETIME or DATETIME2, and so forth. If you don;t problems like this will occur every time you try to use the data (as well as others, when your data gets entered by people using another date system)