The validator will tell me that it’s invalid, and the spec makes it clear how it should render: the second paragraph should be bolded. This is what it means to be HTML; it’s specified behavior in response to invalid HTML.
More generally, the HTML parsing spec makes it clear that invalid HTML isn’t “broken.” It’s “invalid,” but it has a specified rendering output, and Discourse is not following it for <b> tags. Despite that, Discourse should follow that for <b> tags, and it should use the same behavior for BBCode.