I found that if the cell was not visible, ie off the right-hand edge of the screen, the row was not painted.
I've instead linked the code to RowPrePaint event.
private void dataGridView1_RowPrePaint ( object sender, DataGridViewRowPrePaintEventArgs e )
{
if ( (bool)dataGridView1.Rows[e.RowIndex].Cells[userColumn].Value == true )
{
dataGridView1.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.MistyRose;
}
}