I think I may have solved this, but had to write a quick filter snippet because the built in filters didn't work on the user page:
(Using ClassExtender)
In register page:
<label for="bool">BOOL CHECKBOX</label>
<input type="hidden" name="bool" value="0" [[!+reg.bool:checkfor=`0`]] />
<input type="checkbox" name="bool" id="bool" value="1" [[!+reg.bool:checkfor=`1`]] /><br/>
In user fields:
<div class="x-form-item x-tab-item">
<input type="hidden" name="bool" value="0" [[+bool:checkfor=`0`]] />
<input type="checkbox" name="bool" id="bool" value="1" [[+bool:checkfor=`1`]] class="x-form-text x-form-field"
onClick="Ext.getCmp('modx-panel-user').markDirty();" /><br/>
</div>
snippet (checkfor):
<?php
if ( $options === '0' && $input === '0' ){
return 'checked';
}
if ( $options === '1' && $input === '1' ){
return 'checked';
}
Does this look sound? It certainly seems to work fine.
The POST issue seemed to be related to passing null values, as soon as you force a value it seems to work as with text fields.