you need to loop the options as you have, but you're missing the xf:checkbox declaration.
as an example from the account_preferences template:
Code:
<xf:checkboxrow label="{{ phrase('content_options') }}">
<xf:option value="watch_no_email" name="option[creation_watch_state]" checked="{{ $xf.visitor.Option.creation_watch_state ? true : false }}"
label="{{ phrase('automatically_watch_content_you_create...') }}">
<xf:checkbox>
<xf:option value="watch_email" name="option[creation_watch_state]" checked="{{ $xf.visitor.Option.creation_watch_state == 'watch_email' }}"
label="{{ phrase('and_receive_email_notifications') }}" />
</xf:checkbox>
</xf:option>
<xf:option value="watch_no_email" name="option[interaction_watch_state]" checked="{{ $xf.visitor.Option.interaction_watch_state ? true : false }}"
label="{{ phrase('automatically_watch_content_you_interact_with...') }}">
<xf:checkbox>
<xf:option value="watch_email" name="option[interaction_watch_state]" checked="{{ $xf.visitor.Option.interaction_watch_state == 'watch_email' }}"
label="{{ phrase('and_receive_email_notifications') }}" />
</xf:checkbox>
</xf:option>
<xf:option name="option[content_show_signature]" checked="{$xf.visitor.Option.content_show_signature}"
label="{{ phrase('show_peoples_signatures_with_their_messages') }}" />
</xf:checkboxrow>