OK, sorry it took so long.
Now that I've played with it a bit, I don't think you need user variables -- I was thinking of rankings, and that's not actually what you want.
Basically, if you join all the dog/dates to themselves, any time you get a condition where the dates differ by 4 days for a given dog, you want that dog back. If that's the case, this should work:
select distinct t1.dog from
(
SELECT s.dog,t.date
FROM singles s
INNER JOIN tournament t ON t.enumber = s.event
) t1
inner join
(
SELECT s.dog,t.date
FROM singles s
INNER JOIN tournament t ON t.enumber = s.event
) t2 on ( t1.dog = t2.dog )
where t1.date > t2.date and DATEDIFF( t1.date, t2.date ) > 4
order by t1.dog, t1.date
The date comparison in the where clause is simply to ensure the temporal order of the two dates, so that the DATEDIFF() will never be negative; and it neatly cuts down the number of rows to examine.
Does that make sense?