The conclusion: It is not the System Locale that is responsible for wrong ID3v1 characters but something in CUETools. But what...?
CUETools uses taglib-sharp to write tags. By default, taglib-sharp follows the ID3v1 standard and uses Latin-1 encoding for ID3v1 tags, which means that non-Latin-1 characters are replaced by '?'.
There is however an option in taglib-sharp which changes it's behaviour:
/// <summary>
/// Gets and sets whether or not to use a broken behavior for
/// Latin-1 strings, common to ID3v1 and ID3v2 tags.
/// </summary>
/// <value>
/// <see langword="true" /> if the broken behavior is to be
/// used. Otherwise, <see langword="false" />.
/// </value>
/// <remarks>
/// <para>Many media players and taggers incorrectly treat
/// Latin-1 fields as "default encoding" fields. As such, a
/// tag may end up with Windows-1250 encoded text. While this
/// problem would be apparent when moving a file from one
/// computer to another, it would not be apparent on the
/// original machine. By setting this property to <see
/// langword="true" />, your program will behave like Windows
/// Media Player and others, who read tags with this broken
/// behavior.</para>
/// <para>Please note that TagLib# stores tag data in Unicode
/// formats at every possible instance to avoid these
/// problems in tags it has written.</para>
/// </remarks>
public static bool UseBrokenLatin1Behavior {
get {return use_broken_latin1;}
set {use_broken_latin1 = value;}
}
However, there's currently no way for the user to set this option. I guess i could be added to advanced config in CUETools, although i agree with the authors of the above comment that it's not a desired behaviour.