Эта часть выполняется дважды:
c *= 2
Первый раз, когда вы вызываете G (b).Второй раз, когда вы печатаете на консоль.
Одно выполнение фактически вычисляет:
a + b++ + (c *= 2)
Но так как c умножается на 2 (и присваивается обратно c) при каждом выполнении, вы получаете 109вместо 105. Переменная c
упоминается как одна точная ячейка памяти в области действия функции Add, фактически используемая как делегат Func (и экземпляр Func остается неизменным все время), поэтомуне то же самое, что если бы вы делали некоторые вложенные вызовы с функциями (когда в функцию происходила бы только передача по значению, возвращалось бы значение, область действия функции закрывалась и никогда не получала доступ снова с тем же контекстом).