^C interrupts the current operation, while ^[ actually finishes the input
sequence. The only practical difference I can think of is that when you entered
input mode with a prefixed number, ^C ignores it. So 2iabc^C only writes
`abc', but 2iabc^[ writes `abcabc'.
Edit: apparently ^C also ignores abbreviations. :ab lhs rhs, then ilhs^[
writes rhs, but ilhs^C writes lhs.