the form code at https://github.com/divio/django-cms/blob/develop/cms/admin/pageadmin.py#L328 will basically toggle the 'published' value in excludes on each request.
It should be more like this (there must be a simpler way to express this though):
if 'published' in self.exclude:
if 'published' not in self.exclude:
BUT it would be cleaner to not use the exclude class attribute to save this state, because it is persistent between requests. Instead we should explicitly pass in the excluded fields to form = super(PageAdmin, self).get_form(request, obj, **kwargs).
form = super(PageAdmin, self).get_form(request, obj, **kwargs)
this should not happen anymore and should be fixed with the language publish