El problema con las casillas de verificación (como ha notado) es que las que no están marcadas no envían ningún dato.
El truco estándar para evitar esto es...
<input type="hidden" name="field_name" value="0">
<input type="checkbox" name="field_name" value="1">
Cuando la casilla de verificación está marcada, su valor se envía como aparece más adelante en el documento. Si no está marcado, se envía el valor de entrada oculto.
Luego puede simplemente verificar el valor por nombre
$field = isset($_POST['field_name']) ? $_POST['field_name'] : false;
$dbFlag = $field ? 'Yes' : 'No';
En tu caso particular, incluye el page_id
en el nombre de entrada, por ejemplo
<input type="hidden" name="likebutton[416]" value="0">
<input type="checkbox" name="likebutton[416]" value="1">
Y en PHP
foreach ($_POST['likebutton'] as $pageId => $likeFlag) {
$dbFlag = $likeFlag ? 'Yes' : 'No';
// update DB
}