Just wanted to chime back in with my solution. I scoped my comm lines and saw that the delay function that I was providing the drivers was not accurate. Therefore the timing between some calls was not according to the datasheet. When I corrected the delay function, the communication problems with the BMM resolved.
I have a similar problem but a good delay function doesn't seem to fix it. I'm never able to get an acknowledge bit when calling slave address 0x10.
Does anyone else know what I can try?