Creating bmesh from an object: why is scale ignored?
This is NOT a bug. 

The bmesh module provides access to blender's mesh data structures.

The bmesh is created from the mesh using its local coordinates.  What object or objects it is linked to, and their object transformations,  is immaterial.  The mesh may also be linked to no objects.

For example. Python console code. The cube mesh linked to cube object in default scene

&gt;&gt;&gt; C.object.data
bpy.data.meshes['Cube']


there is no difference between creating a from mesh bmesh passing C.object.data or bpy.data.meshes["Cube"] as the mesh argument.

To transform the bmesh to global coordinates, based on its linked object obj

bm = bmesh.new()
bm.from_mesh(obj.data)
bmesh.ops.transform(bm, matrix=obj.matrix_world, verts=bm.verts)


If you require the deformation modifiers assigned to object applied to the bmesh, use bm.from_object(...). However this will also not apply any object transformations (loc, rot, scale) to the coordinate data of the bmesh either, and will need to be done separately as shown above as well.