Ciao
Anche la prima soluzione andava bene, non funzionava solo perchè il MemoryStream era alla fine del flusso (dopo aver scritto i dati), quindi per farlo funzionare avresti dovuto aggiungere un'istruzione MemoryStream.Seek(0, SeekOrigin.Begin):
Image imgOriginale = Image.FromFile(path);
Bitmap bmp = new Bitmap(imgOriginale, new Size(640, 480));
MemoryStream ms = new MemoryStream();
bmp.Save(ms, ImageFormat.Jpeg);
byte[] img = new byte[ms.Length];
ms.Seek(0, SeekOrigin.Begin);
ms.Read(img, 0, img.Length);
return img;
Luca