Unexpected result from "bm.faces.new(verts)"
The contextual create operator.

Rather than calculate the winding order to create face with bm.faces.new(verts) let the operator do it for you.

bmesh.ops.contextual_create


  Contextual Create.
  
  This is basically F-key, it creates new faces from vertices, makes
  stuff from edge nets, makes wire edges, etc. It also dissolves faces.
  
  Three verts become a triangle, four become a quad. Two become a wire
  edge.


import bpy
import bmesh

ob = bpy.context.edit_object
me = ob.data
bm = bmesh.from_edit_mesh(me)

verts = [v for v in bm.verts if v.select]
bmesh.ops.contextual_create(bm, geom=verts)

bmesh.update_edit_mesh(me)