I've had a look and I think I have located an issue with BodyHtml which causes it to return with incorrect encoding. As you have noticed you can access the BodyRaw property to retrieve the full HTML text on a HTML message. I'm working on a fix but the workaround is to use BodyRaw.
The issue with empty BodyRaw is separate. BodyRaw contains the body contents at the time the EmailMessage object was created (BodyHtml will return the current contents direct from the underlying MAPI message). If you receive a message which is fully downloaded by BodyRaw is empty the first test I would like you to try is to displose the EmailMessage and create a new one - something like this:-
ItemId id = em.ItemId;
em.Dispose();
em = new EmailMessage(id);
If this works and contains the BodyRaw then it is some kind of timing issue, if the issue persists there is some other issue. Check that the NativeMessageFormat is returned as Html, and that BodyText is also empty. You could check the MimeText property but this should not be used for ActiveSync accounts on Windows Mobile 6.
Please let me know how you get on and I'll try to help resolve this.
Regards,
Peter