This is all scripting for the most part.
If you look at 903sion.dlg, E121 should be the node of interest. You can see that fires the script a_sion with parameter 3 - https://github.com/KOTORCommunityPatches/Vanilla_KOTOR_Script_Source/blob/master/TSL/TSLRCM/Modules/903MAL_Malachor_V_Trayus_Academy/a_sion.nss
That triggers case 3 of the switch runs that function that handles his death scene. Clears all effects on him, plays the ANIMATION_LOOPING_RAGE animation on him for 1.5 seconds, removes his minimum 1HP flag, applies the instant death effect, then unlocks the door.
If you want to prevent a node from skipping and run for as long as you want, then you need the ActionPauseConversation and ActionResumeConversation functions. However, you have an added wrinkle here. Sion is the conversation owner. A conversation will immediately terminate if the owner dies. Typically in cases like this where an NPC needs to die, you get around it by making the owner an invisible placeable, but in this case that would probably break all the other scripts. So you'll need a bit of slight of hand to get around it. What I would do is have him manually play the death anim, spawn the VFX placeable over the top of him, then use that as cover to jump Sion somewhere out of sight so he can be killed after the cutscene finishes. The question will be whether the VFX actually obscures him sufficiently. That will probably require some custom shot framing with new static cameras. You could probably do a wide shot from behind the PC and use the PC themselves to block it if absolutely necessary. You can script switching between static cameras using the SetDialogPlaceableCamera function.