How does C# implicitly cast terms of integral types to terms of double?
The algorithm is IEEE 754 Round to nearest, ties to even. The “counterexamples” to this shown in the question are in fact proofs of a bug which has been accepted by the Roslyn team. The bug is caused by the “runtime conversion implementation”.