As always, thank you very much Alexey, that was very helpful! The code worked perfectly, but I noticed that it is also required to scale the region size. The complete working code, for anyone who might be interested is as follows:
def placeRegion(center,size,angle):
crs = chunk.crs
T = chunk.transform.matrix
center = Metashape.Vector((center[0],center[1],center[2]))
center = T.inv().mulp(crs.unproject(center))
m = crs.localframe(T.mulp(center)) * T
R = m.rotation() * (1. / m.scale())
size = Metashape.Vector((size[0],size[1],size[2])) / m.scale() # scaling the size is required
angle = np.radians(angle)
rot = Metashape.Matrix([[np.cos(angle), -np.sin(angle), 0], [np.sin(angle), np.cos(angle), 0], [0, 0, 1]])
rotation = R.t() * rot
chunk.region.rot = rotation
chunk.region.center = center
chunk.region.size = size
where:
center = (X,Y,Z) # in CRS coordinates
size = (width,depth,height) # in meters
angle = float # rotation angle of the region (in degrees)