I don't think it's the loop implementation. The stuff in the loop should take multiple orders of magnitude more time than the loop itself:
for poly in polygon_subset:
if np.linalg.norm(poly.center - point) < max_dist:
close_polygons.append(poly)