The answer to the above question seems to involve moving the scene cursor to the selected face, performing some matrix magic (math) and at one point using bpy.ops.object.origin_set without ruining said matrix magic.
Any chance that anyone has done this before, or know the actual math required for it?
NOTE: My objects are not at the origin and may be rotated already!