Decided to seperate renderable triangles from collision polygons and added the facility to define them seperatley to the map editor.
As a result, the nice rounded shape in the middle of the screenshot above is constructed of about twenty triangles in terms of rendering, but exists as a single convex polygon in terms of collision detection.
Still obviously takes longer to collide test against a polygon with lots of edges, but better than testing against than many triangles.
I tried this zone bucket thing for reducing the collision checks, but it actually ended up slower than the current method. I think that the current system is okay - AABB checking everything against everything else. I can have about 150 individual objects all bouncing against each other and the map before the frame rate slows, and only then if they are densely packed, so more than fast enough for the sorts of levels I envisage.
If it does present a performance issue later, I always have other avenues to explore to cull collision checks, but until it presents an actual problem, I'm going to leave it as it is.