If I am not mistaken, the target run should be included in the list of neighbour runs.
At least I don't see where it is excluded.
In that case this addition:
  
  
    
        
          |  | for run in (target_run,) + neighbours | 
    
   
 
leads to it contributing twice to the background model.