Take a look at the expression: text.sourceRectAtTime().top (I think that right, I’m not in front of my pc)
That would get you the top most position and then sourceRectAtTime().height which gives you the height of the text box. So I think you could then position your precomp based on the top position and the height of new lines.
The alternative would be to have separate text layer for each bullet point, controlled in the same way in essential graphics, but have the precomp’s opacity controlled by an if statement, something like :
if ( pickwhip-to-source-text == ‘’ ) { 0 } else { 100 }