Anything you can do with makeSingletonList2() you can also do with makeSingletonList(), because makeSingletonList() can accept a subclass of its declared argument type (otherwise we wouldn't have polymorphism would we).
makeSingletonList2() attempts to make this more explicit, but I suspect only has the effect of making the method type argument inference algorithm work harder. I have a hunch (could easily be wrong), that in some cases it might need to use the assignment conversion rule to infer T which means it can't infere T if there is no assignment conversion on the result of the method call.
/*but we can't make a list of sub types; seems weird ...*/
List<SubType> lsub = makeSingletonList(new SubType()); //ERROR
The type of "new SubType()" expression which matches the method's signature is "SelfType<SuperType>" ( from SubType extends SuperType and SuperType extends SelfType<SuperType>) so T is SuperType, so the return type is List<SuperType>.
But that doesn't explain your error message, or the fact that the unassigned one fails also.
Is this one of those situations where a certain Peter says "mea culpa", or am I not spotting something here?
If you are keen, you could work the type inference algorithm by hand on this case.
download/view Java language Spec (3rd ed) here http://java.sun.com/docs/books/jls/index.html
section 15.12.2.7 (after checking that the preceding 15.12.2 steps select your method)