I seem to remember having some success treating this as writing out all the productions (with their lambdas) that you'd get by writing them with their lambdas, but then just scratching the lambda out (as we're entitled to do, just because lambda is null).
So making sure Y can still do its thing without making direct use of lambda:
Y -> a | b | b-lambda = b ... (which, as you say, we already have)
so then that's
Y -> a | b.
And we're agreed on at least one of our nonterminals!
Right so then let me stick my neck out a bit and see if I can fix the other nullables to still do what they were able to do when they made use of the lambda production eventually. (these would be additional..)
X -> aY -> a-lambda = a, which we already have ...
(it can still do X -> aY -> aa or ab so it's just this lambda case we need to add)
and then what about X -> bX? (Since that RHS X is a nullable)
X -> bX -> baY -> ba-lambda = ba, which is new.
I'd better pause again there, eh? Is my X -> ba OK? Or is that just something I get from "normal x"? I think I might be wrong here ...