2014/1/22 Nicolas Goaziou <n.goaziou@gmail.com>
See `org-list-write-struct' docstring. Basically, STRUCT doesn't match
real structure anymore since step C. You need to provide the original
structure as a third argument so `org-list-write-struct' can modify
buffer by set difference.

  (let* ((struct (org-list-struct))
         (old (copy-tree struct)))
    (org-list-set-checkbox (line-beginning-position) struct "[X]")
    (org-list-write-struct struct (org-list-parents-alist struct) old))

I implemented it. See my post:
    Check checkbox and move to end of list

--
Cecil Westerhof