This is not a bug.
int.MinValue * -1 is 1 greater than int.MaxValue can hold. Thus, the number wraps around back to int.MinValue.
This is basically caused by an integer overflow.
Int32.MinValue:
The value of this constant is
-2,147,483,648
Int32.MaxValue:
The value of this constant is
2,147,483,647
So, -2,147,483,648 * -1 = 2,147,483,648 which is 1 greater than Int32.MaxValue.