<b>
and <i>
are both related to style, whereas <em>
and <strong>
are semantic. In HTML 4, the first are classified as font style elements, and the latter as phrase elements.
As you indicated correctly, <i>
and <em>
are often considered similar, because browsers often render both in italics. But according to the specifications, <em>
indicates emphasis and <strong>
indicates stronger emphasis, which is quite clear, but often misinterpreted. On the other hand, the distinction between when to use <i>
or <b>
is really a matter of style.