$checkboxes = "<input type='checkbox' name='selected[]' value='$i++'/><br />";
Questa è una stringa, $i viene valutata solo in questa istruzione e vale 0, quindi dentro alla variabile $checkboxes hai giustamente
<input type='checkbox' name='selected[]' value='0++'/><br />
e viene inserito così ad ogni iterazione del foreach.
Non puoi assegnare la stringa ad una variabile ed usarla dentro il foreach, devi scriverla per esteso dentro il ciclo al posto di $checkboxes con $i invece di $i++, così verrà $i verrà valutata ad ogni iterazione e mettere $i++ come istruzione finale del ciclo.