img = new UnmanagedImage(..., img.Stride, PixelFormat.Format8bppIndexed);
That's the statement where the problem started. You are passing the pixel data and the stride of a 24bpp image but lied and said it is an 8bpp image. The result is still a 24bpp image and a thoroughly confused filter.
This cannot work, conversion from 24bpp to 8bpp is far more involved. The 8bpp image won't only have a different pixel format and stride, it also requires a color table (aka palette). Creating a good color table with 256 colors that produces a reasonably matching 8bpp image is difficult.
You'll need one of the classes in the AForge.Imaging.ColorReduction namespace to get that job done.