Possibility #1: The sectors per fat is correct, but the number of sectors per track is wrong. Bochs uses its own idea for SPT, Heads per cyl, and # of cyls -- and mkdosfs has no way of knowing what values bochs will use.
#2: Bochs has a bug when it comes to hard disk images that are not created with bximage. The usual symptom is that the bochs BIOS locks up when you try to read the image, but there could be other errors that I don't know about.
#3: You may have an off-by-one error when you are trying to take into account the reserved sectors at the beginning of the partition, and the offset of the beginning of the partition from the beginning of the disk. Remember that in CHS, the first sector is sector #1, not sector #0 -- this one thing can easily cause off by one errors -- it tripped me up twice, as I recall.
You may want to look at the FAT12 hard disk/floppy boot code that I posted here:
viewtopic.php?p=167868#p167868