Я поясню. В вашем проекте, вы создали встроенный TCheckBox в стиле, дали ему свое название "mycheckbox". Но когда вы прокручиваете элементы в списке, то стиль выгружается для не видимых элементов и загружается для новых видимых заново. В этом случае TCheckBox теряет свое состояние (стоит галка или нет). Когда вы задаете галку для итема через:
Item.StylesData['mycheckbox'] := True;
то при загрузке стиля итем автоматически восстанавливает значение галки. А для состояния, когда галка снята, итем не сохраняет эту информацию. Поэтому ваше найденное решение заключается в том, что всем итемам нужно через StylesData задать состояние TCheckBox. И это в принципе правильно кроме одного НО: Обратите внимание, что не нужно устанавливать галку и тут же ее сбрасывать. Достаточно сделать это один раз и установить требуемое значение.
Подробнее о ситуации выгрузке стиля можно прочитать тут: Почему для моих объектов стиля сбрасываются данные при прокручивании TListBox? - это аналогичная ситуация.
P.S. На счет попутного вопроса о том, почему при загрузке нового стиля галка стоит отмеченной отвечу. В TListBox выгружаемые стили скрывающихся итемов при прокручивании не распускаются, а повторно используются для новых итемов.