Coming back to this a year later! I actually found a template online and modified it. Key elements: state the exact amount owed, reference the contract date and project name, include a firm deadline (I used 14 days), and mention that you'll pursue legal remedies if unpaid. Keep it professional, no threats or emotional language.
Quick update on my situation: I've now done 6 projects with the new contract that includes late fees (1.5% monthly) and milestone payments. Only had to enforce the late fee once, but just having it in writing makes clients take payment seriously.