I quickly read the spec and it appears that CHAR is not to be trimmed when converting to VARCHAR. From 6.13 <cast specification>:
c) If SD is fixed-length character string, variable-length character string, or large object character string, then
i) If the length in characters of SV is less than or equal to MLTD, then TV is SV.
ii) If the length in characters of SV is larger than MLTD, then TV is the first MLTD characters of SV. If any of the remaining characters of SV are non-<space> characters, then a completion condition is raised: warning — string data, right truncation.
So it looks if current behavior is incorrect. However, I do recall a bug with
insert into t2 select ' ' as twoSpace from t union all select ' ' as threeSpace from t
where the target column in t2 is a varchar(4). We should make sure not to break that again. The twoSpace value must not be padded to three spaces when it is implicitly converted from CHAR(2) to CHAR(3). IIRC it should be converted directly to a varchar(4).