Script spawned beams (via sexp) do not have their graphics correctly loaded
If a beam spawned via script, via a runSEXP beam-create, is not used elsewhere traditionally in the mission it's graphics will not be loaded, and its sections will be invisible. beam_fire specifically checks for beams which are 'not used', and loads their graphics, but beam-create calls preload_turret_change_weapon which marks the weapon as being used, despite its graphics not being loaded.
There isn't a preloader for scripts like there is for sexps. I'm not even sure if a preloader is practical since the Lua parser is trickier than the sexp parser. It might be necessary to make some explicit functions, e.g. ship_class:preload() or weapon_class:preload().
Agreed, though in this case, it would have worked properly, if not for the preloader. preload_turret_change_weapon prevented the graphics from being correctly loaded.
Well it's not the preloader per se, it's the weapon_mark_as_used infrastructure.