Solved it. Only the first cell can have text. So, remove all text (and runs) from subsequent cells in the merge.
Something like:
tc = table.Elements<TableCell>(); foreach (Paragraph pg in tc.Elements<Paragraph>()) pg.RemoveAllChildren();