int a = -2147483648;
int b = a * -1; // -2147483648

32ビットの signed int の値の範囲が

-2,147,483,648 ~ 2,147,483,647

であることから、b の値が +2147483648 になり得ないことは分かります。
ただ、-2147483648 になる理由が分かりません。
C# だけでなく Java などでも同様のようです。
仕様と言ってしまえば、それまでなのでしょうが、何か合理的な理由があるのでしょうか?

a = (a * -1) * -1

という式が成り立つようにするためでしょうか。