Ball doesn't roll straight in Blender Game
As you have  noted the mesh is the issue , switch to wireframe view and launch the BGE to see how it get triangulated ( combined with some rounding errors ) it will cause the deviation of the ball.

To avoid that you have to add either a Subsurf modifier ( in simple mode ) or a Remesh modifier ( in sharp mode ) and apply it before adding the Boolean modifier this will limit the bad triangulation inside a small area ( all the mesh are triangulated when passed to the BGE)

#(1) Create a board using existing cube:
....
### add and apply subsurf 
modifier           = board.modifiers.new('subsurf', 'SUBSURF')
modifier.levels    = 2
modifier.subdivision_type = 'SIMPLE'
bpy.ops.object.select_all(action='DESELECT')
bpy.context.scene.objects.active = board
bpy.ops.object.modifier_apply(apply_as='DATA', modifier="subsurf")

### cut a hole using boolean difference:
....