Using overlap() to check if two meshes are intersecting?
Turns out I had to apply location to the BMesh I generated, I have edited code above to work:

        bm1.transform(scene.objects[obj_now].matrix_world)
        bm2.transform(scene.objects[obj_next].matrix_world) 


This is the reason I was getting intersection for every face and object, since they were all in the same location as far as BVHTree was concerned.