Идельного рандома в проге нет
поэтому берется какое-либо число, и потом проганяется через сложную функцию, чтобы на выходе получилось другое число, потом для следующего рандома, берется созданный результат, и тд.......... Самое первое значение которое использовалось в цепочке называется сидом
то есть, например, при создании Random ты указал сид 2
потом вызвал Random.Next() эта двойка прогналась через функцию и ты получил, допустим 103
Потом при следующем вызове рандом будет подставлять в функцию уже 103, и т.д
Так как функция это просто последовательность действий - если задать двум рандомам один и тот же сид, то их цепочка случайных чисел будет одиннакова - за счет этого, например, в майнкрафте, ты можешь задать чей-то сид и получить точно такой же мир как у того человека
Дальше, так как ты не указывал сид явно, random взял вместо него значение по умолчанию, а именно - текущее время.
Так как инициализация твоих двух рандомов стоит рядом, иногда они срабатывают в один тик времени, и, соответсвтенно, они имеют одиннаковый сид, и их цепочка значений будет одиннаковая)
а так как ты в summan пишешь разницу этих чисел, если ты отнимешь одиннаковые числа получишь ноль, вот он у тебя и всплывает