One option is to treat labor charges as though they are parts. Then the list view layout like you see in the starter solution will work for you. In your screen shot above, you can still have two different portals to the same lineitems table but use a filtered relationship to keep the parts in one portal and labor in the other.
Your invoice can then use a sub summary part and sorting to group and separate the parts and labor charges on your invoice.
If you truly want to keep the charges in separate tables, you'd have to resize the portals to have many more rows than you'll ever need and set them to slide up/resize the enclosing part. Since this makes for a layout that doesn't work well for data entry, you'd do this on a duplicate layout used only for printing.
Thanks for your help. I tried the second solution with the sliding up tables and everything works fine, until it comes time to print. There is usually at least one line item that doesn't display, almost as if it is hid on the page break or something. Is there a fix for this, or do I need to go back and do it the first way you mentioned?
Curious. I gather that the portals are tall enough so that it's not just a case of there being more items than can display in the portal?
I've seen cases where a portal that crosses a page break results in the row of text being vertically split, but not with a row disappearing all together.