Hi pe_matthewalexander , thanks for reaching out us.
With regard to your question I suggest the following options (which strongly depend on the context you're supposed to run)
implement a MessageData::CoreMessage() and check for EVMSG_RAYTRACER_FINISHED to be dispatched;
use the BaseDocument::RenderDocument() to fire and control the render execution
use the Remote effect as described
here to have an external script being run upon rendering being completed
implement your own VideoPostData (assuming you're willing to move to C++)
Best, Riccardo