The below code will rotate a selection of objects around an arbitrary location (using the active object's location here) by the chosen angle (45 in this example). I cobbled this code together from a few places but I don't fully understand how to manipulate matrices very well yet.
If you create a few objects and press run script you'll see 45 degrees is added to the objects while transforming them around the active object. This is almost exactly what I need minus one issue. I need this code to set the rotation value to 45 (or whatever arbitrary value) when the script is run not add 45 degrees to the selection of object's matrices.
import bpy
from math import radians
from mathutils import Matrix
ob = bpy.context.object
rot_point = ob.location
rot_angle = 45
rot_axis = 'Y'
mat = (Matrix.Translation(rot_point) *
Matrix.Rotation(radians(rot_angle), 4, rot_axis) *
Matrix.Translation(-rot_point))
for obj in bpy.context.selected_objects:
obj.matrix_world = mat * obj.matrix_world