Посмотрите в вашем методе:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
Всегда ли этот метод возвращает правильное количество строк? Кажется, вы НЕ удаляете строку из источника данных, который поддерживает ваш раздел.
EDIT:
Возможно, вы делаете удаление, но оно не было завершено (или зафиксировано) в тот момент, когда источник данных вашей таблицы запрашивает новый счетчик строк. Возможно, вам придется отложить [tableView deleteRowsAtIndexPath:] до фиксации базы данных.