face.center returning wrong location
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.