The assignment conversion (5.2) and method invocation conversion (5.3) sections contain this paragraph, which describes how unchecked conversions can occur in these contexts:
"If, after the conversions listed above have been applied, the resulting type is a raw type (§4.8), unchecked conversion (§5.1.9) may then be applied. It is a compile time error if the chain of conversions contains two parameterized types that are not not in the subtype relation."
This is problematic for a few reasons.
First, it's unclear whether the "it is a compile time error" clause is restricting the set of allowed conversions, or if it is independently describing an error that occurs despite the conversion being allowed. This is important because overload resolution is defined based on the argument types representing an allowed conversion. (15.12.2.3)
Second, it is not strict enough to prevent conversions like this, where StringList extends List<String> (StringList is not a parameterized type, nor is it raw):
StringList -> List -> List<Integer>
Similarly, for StringPair<T> extends Pair<String,T> (StringPair is a raw type):
StringPair -> Pair -> Pair<Integer,Integer>
It seems that the approach used in 15.12.2.2 to define "applicable by subtyping" is the right way to go: _first_ do the unchecked conversion (commit to particular type arguments for a raw type), _then_ allow widening.