In Python rotate a polygon to face something
import bpy
from mathutils import Matrix

def turn_face_to_point(obj, face, target):
    #init
    mat_world = obj.matrix_world

    #transform the face to world space
    #to take non-uniform scaling into account
    #which may change the angle of face.normal
    for index in face.vertices:
        vert = obj.data.vertices[index]
        vert.co = mat_world @ vert.co

    #get the rotation difference
    track  = empty.location - face.center
    q = face.normal.rotation_difference(track)

    #compose the matrix
    #rotation around face.center in world space 
    mat = Matrix.Translation( face.center) @ \
          q.to_matrix().to_4x4() @ \
          Matrix.Translation(-face.center)
    #transform the face back to object space afterwards      
    mat_obj = mat_world.inverted() @ mat

    #apply the matrix to the vertices of the face
    for index in face.vertices:
        vert = obj.data.vertices[index]
        vert.co = mat_obj @ vert.co

#test        
obj   = bpy.data.objects['Plane']
empty = bpy.data.objects['Empty']
face  = obj.data.polygons[0] 

turn_face_to_point(obj, face, empty.location)