Actually, if node b rejects your message, it will respond to you with a 'reject' message which will include an error code for the reason of the rejection.
Might. Rejects can be useful for software diagnostics but you shouldn't count on them for much.
You should always INV first. While handing nodes loose transactions currently works, it may not work forever. (and in some configurations, like nodes without relay set, may get you instabanned). It's also better for privacy, generally, since sending a loose transaction pretty much guarantees you are the source of the transaction.