Well you can debug your result by queries the result and see yourself what values are being qualified for update.
Try running below query for each Task and validate the result. You will find anomaly in status that are causing the update to fail.
SELECT @Percent [Percent],
(CASE WHEN @Percent = 100 THEN 3
WHEN @Percent <> 0 THEN 2
WHEN (SELECT COUNT(ID) FROM TaskTimerInfo WHERE TaskId = @TaskId) > 0 THEN 2
WHEN (SELECT COUNT(TaskOwner.Id) FROM TaskOwner WHERE TaskOwner.TaskId = TaskList.Id AND TaskOwner.IsActive = 1) <> 0 THEN 1
ELSE 6
END) [Status],
CASE WHEN @Percent = 100 AND ActualEndDate IS NULL THEN @LastUpdateDateTime END [ActualEndDate],
@LastUpdatedBy [LastUpdatedBy],
@LastUpdateDateTime [LastUpdatedDateTime]
FROM TaskList
WHERE Id = @TaskId