На вашем
if (pathIndex == indexPath)
вы сравниваете указатели, а не их значения, попробуйте
[pathIndex isEqual:indexPath]
или используйте
- (NSComparisonResult)compare:(NSIndexPath *)otherObject;
Затем вы присваиваете значение pathIndex, не сохраняя и не копируя его, как
pathIndex = [indexPath copy];
(конечно, теперь, поскольку вы сохраняете значение, перед копированием нового объекта вы должны освободить предыдущий [pathIndex release];)
Наконец, в вашей реализации не предусмотрено множественного выбора, только один выбор. Вы можете попробовать добавить и удалить объекты NSIndexPath в NSMutableArray и проверить их наличие в изменяемом массиве в cellForRowAtIndexPath.