For reference, I think I'd do it something the following. I haven't coded or tested it yet...but it should work (in theory).
Disclaimer...this is pseudo-code:
app is a "global" object for the application settings, etc.
app.FontMetrics is an array of FontMetrics for application fonts -- helpful so that we don't have to recreate them all the time
app.ScreenWidth is the width of the screen returned from roDeviceInfo
subFont is the subtitle font; it can be italic or normal depending on how we parsed the subtitles from the original video
text is the subtitle text we need to render; note that in both of out channels we precalculate all subtitle offsets, etc. before we start video playback. We do this because trying to calculate this during video execution does not work on the Roku. There's not enough horsepower, so you need to know what you're drawing, when you're drawing it, and where before the video starts.
'get the displayed text size
size = app.FontMetrics[subFont].Size(text)
if size.w > (app.ScreenWidth - 40) then '40 is an arbitrary padding value here...it could be anything
'we want to split the string roughly in half. We start looking at about 45% and split at the first space found. Hopefully that's between 45 and 55% of the string
targetPos = CInt(size.w * .45)
splitPos = instr(text, targetPos, " ")
'probably do some looping/error checking to make sure that splitPos <> 0...but we'll skip that for now
subLine1 = left(text, splitPos)
subLine2 = mid(text, splitPos)
'do something with the subtitle lines...push them onto a stack or something
end if