It looks to me like the ice:panelPopup's modal code and the blockUIOnSubmit modal code are interfering with each other. With two modal mechanisms trying to restore key listeners, it's very possible that one saves and restores the temporary blocking listeners setup by the other.
This could be alright:
A.block : Save away real listeners into A.real, and wire in A.fakeNOOP
B.block : Save away A.fakeNOOP listeners that we thought were real into B.real', and wire in B.fakeNOOP
B.unblock : Remove B.fakeNOOP listeners and restore B.real'
A.unblock : Remove A.fakeNOOP listeners and restore A.real
This would be broken:
A.block : Save away real listeners into A.real, and wire in A.fakeNOOP
B.block : Save away A.fakeNOOP listeners that we thought were real into B.real', and wire in B.fakeNOOP
A.unblock : Remove A.fakeNOOP listeners and restore A.real
B.unblock : Remove B.fakeNOOP (the real ones!) listeners and restore B.real' (fake NOOP ones!)
Let's look at "the resulting DOM update from the ajax push must not include the content for the input field". blockUIOnSubmit does the block onBeforeSubmit and the unblock onAfterUpdate, so an ice.panelPopup call to Ice.modal.start is likely between that, so Ice.modal.start will save away fake NOOP event handlers setup by blockUIOnSubmit, and when Ice.modal.stop is called, it will restore those, thereby breaking the elements. If the update had included fresh elements, the Ice.modal.start would have been saving the fresh new valid listeners instead of the fake ones, and so would restore real ones.
Attached test case that shows the issue.
Steps:
Note: I did notice that the very first time testing this in a fresh browser instance that it does work but the second try does not.