I suspect the problem lies in this line:
If e.Item.DataItem("Delivered") = True
The default behavior of repeating data bound controls (repeater, datagrid, gridview, etc) is such that when you post back a page, the control is reconstructed from viewstate. The control's data source is null and thus each item's DataItem is null. All the items of the control are reconstructed purely from viewstate so you are accessing a property (DataItem) that is null on postback.
One option may be to change your code to run in the ItemDataBound event instead of ItemCreated. ItemCreated runs every time a repeating item is created, on data binding or on postback reconstruction. ItemDataBound, as the name suggests, only runs when the item is data bound. When the item is reconstructed it should be done so with the state it was in when rendered so you shouldn't need to even have that code run during a post back anyway. It should need only to run when you do the initial data bind. The visibility of your two controls should be properly restored without the need to set them explicitly.