I think this occurs because the exact same bug task is excluded but we are returning bugs and not bug tasks, so if you have a bug with multiple tasks one of the additional tasks will be returned.
From lib/lp/bugs/model/bugtask.py:
matching_bugtasks = [ bug_task for bug_task in matching_bugtasks[:4*limit]
if bug_task != self]
I think this occurs because the exact same bug task is excluded but we are returning bugs and not bug tasks, so if you have a bug with multiple tasks one of the additional tasks will be returned.
From lib/lp/ bugs/model/ bugtask. py:
if bug_task != self]
return matching_bugs
So 'if bug_task.bug.id != self.bug.id' would likely resolve this.