Дубликатов можно избежать, сохраняя ваши элементы в списке, и перед добавлением элемента проверьте, есть ли lst.Contains (itemName). Если это так, не добавляйте его.
Удалить их из списка немного сложнее, потому что это зависит от того, насколько глубоко вы хотите в него войти. Я предполагаю, что вы не хотите PostBack для каждого щелчка флажка. Если вам нужен PostBack, вам потребуется способ сериализации списка флажков и информации в элемент управления в ViewState. Поскольку вы динамически добавляете этот список в выделенный код, я бы порекомендовал невидимый литерал, задачей которого является хранение сериализованной строки, содержащей ваши данные.
Если вам НЕ нужен PostBack, вам нужно будет обработать значительное количество JavaScript, чтобы изменить InnerHTML таблицы, которая выводится CheckBoxList. Опять же, как и выше, я бы использовал Literal или некоторый управляемый ViewState невидимый элемент управления для сериализации состояния. В этом случае литерал не сработал бы, но мог бы.