face.center returning wrong location I wrote and released an add-on and part of the code finds the center of the faces and uses that for other stuff. A user of my add-on sent me this mesh and running this test code:

import bpy
ob = bpy.context.object

for face in ob.data.polygons:
    bpy.ops.mesh.primitive_cube_add(location = face.center * ob.matrix_world)


creates the cubes like this:

They aren't at the right position, doing face.center * ob.matrix_world doesn't fix it either.
The weird thing is that if you do Cursor To Center and then Selection To Cursor and then run the code it works. Any ides why this is?

.blend
The order of operands is important. See matrix multiplication.
face.center is a 3x1 column vector. So swapping the operands 

òb.matrix_world * face.center


will yield the correct result.