Check out "
Bitonal (TIFF) Image Converter for .NET". You can create a "bitonal" (i.e., monochrome) image from a byte array. How you fill that array with color data is up to you. You can load it from a bitonal file (you can also get the byte array data from an image) or you could draw a 32-bit image using a Graphics object then get the raw color data (in the byte array) and manually convert it to 1-bit.
The problem you are seeing when converting from color to 1-bit black and white is likely due to dithering. Dithering is intended to improve the quality of most natural images (e.g., scenery and portraits), but it can actually reduce the quality with computer generated images (e.g., text). When you do the manual conversion from color to 1-byte, just make sure to not dither. For more information on dithering, scroll to the bottom of
this Wikipedia page and look at the images they give as examples of various forms of dithering.