You should call Write on your MagickImageCollection if you want to write all the layers in a PSD file. You should also include an extra image as the first image that is the 'flattened' version of your image. You can change the layer position
with the Page property of MagickImage. Below is a simplified example:

using (MagickImageCollection psd = new MagickImageCollection())
{
// Add all the layers to your image.foreach(MagickImage image in CreateLayers())
{
// Set the position of the layer.
image.Page = new MagickGeometry(6, 6, image.Width, image.Height);
psd.Add(image);
}
// Create flattened image of all the layers and insert this as the first image.
MagickImage flattened = psd.Flatten();
psd.Insert(0, flattened);
// Write the output image.
psd.Write("output.psd");
}

Positioning in turn found a bug:
If separate save layers to file, and next save to psd, at that time layers position is correct and image quality is good, and psd file size cca. half the size of the bad file.

Else if layers load from memory and save to psd, at that time layers position is bad and image quality very poor.

I don't understand why your images are so different if you think you are specifying the correct positions. I don't have enough information at the moment to help you further. Would it be possible to create a small console application that demonstrates this
incorrect behavior?