Explicitly annotating the return type of an overloaded method is required only when it calls a method with the same name.
E.g. in this case you have to annotate the second foo
def foo(x: Int, y: Int) = x + y
def foo(x: Int): Int = foo(x, 42) // return type is mandatory
but in this case you don't
def foo(x: Int, y: Int) = x + y
def foo(x: Int) = x + 42
I'm just speculating here, but it looks very similar to the recursive call case, in the sense that it follows the same spirit. The type inferencer works locally and when it sees what it looks like a recursive call (in this case a call to a method with the same name), it stops and asks for an explicit type.
I think both cases (recursive calls and overloaded calls) derive from the local nature of the type inference algorithm, that won't escape the bounds of a method definition to infer its type.