Вы перезаписываете this.interval каждый раз при создании нового, а значит при остановке очищается последний созданный интервал.
При вашей архитектуре выходит нужно хранить айди интервала в самом объекте-стейте пункта, так же как и время.
Типа такого(сама идея, если нужно под себя доработайте):
if(!oldItem.time){
const IntervalId = setInterval(() => {
if (oldItem.sec < 59) {
oldItem.sec++;
} else {
oldItem.sec = 0;
oldItem.min++;
}
this.setState(({ todo }) =>{
const newItem = {...oldItem,
min: oldItem.min,
sec: oldItem.sec,
time: true,
intervalId: intervalId
}
const newstate = [
...todo.slice(0,xid),
newItem,
...todo.slice(xid + 1)
]
return {
todo: newstate
}
});
}, 1000);
}
Ну и потом сбрасывать тоже из айдишника интервала который внутри объекта хранится.