Reading from a MagickImage is thread safe. You can do the following without any problems:
using (MagickImage watermark = new MagickImage(@"C:\watermark.png")) { Parallel.ForEach(Directory.GetFiles(@"c:\input", "*.png"), (string fileName) => { using (MagickImage image = new MagickImage(fileName)) { image.Composite(watermark, CompositeOperator.Over); image.Write(@"c:\output\uniquefilename.png"); } }); }