Thanks so much Dan. That did change how the backing (not the text) behaves, although it didn’t fix things… here’s how the layers are set up, with the titles up top, the text layer and shape layer backing in the middle, and all the layers (stock) going off the screen at the bottom. Changing to …
if ((m.inPoint <= time) && (n.inPoint >= time)
still caused the backing layer to change size 5 seconds before it should, but now it was changing to the size it should have been *after* the new title has come in. So I then tried this
if ((m.outPoint <= time) && (n.outPoint > time)) {
which works (the backing layer changes size as soon as the title layer appears, which is fine as it covers the other text and its backing).
I’m not quite sure why sourceRectAtTime was seemingly being thrown by dynamically generated text, but in any case it does work. Thank you again!