Вы можете использовать SelectMany для создания плоского списка ваших ячеек.
dataGridView1.Rows.Cast<DataGridViewRow>().SelectMany(row => row.Cells.Cast<DataGridViewCell>())
Теперь у вас есть IEnumerable, вы можете использовать Count или Where, или выбрать значение ячейки.
Считать и выбирать нельзя в одной итерации. Это были бы два запроса.
Но если поместить результат в массив или список и взять длину этого списка, то это будет лучшая идея в плане производительности.
var list = dataGridView1.Rows.Cast<DataGridViewRow>()
.SelectMany(row => row.Cells.Cast<DataGridViewCell>())
.Where(x => x.Style.BackColor == Color.Yellow)
.Select(cell => cell.Value)
.ToList();
int count = list.Count;