Hi again,

memcpy for pixels sounds plausible to me - if you assume that pixels is really the bitmap without additional GS internal information.
But I would recommend not to do this:
bmpNew.width = bmp.width;
bmpNew.height = bmp.height;
bmpNew.bytespp = bmp.bytespp;
bmpNew.pixels = malloc((bmp.width*bmp.height)*bmp.bytespp);
This (.pixels = malloc...) generates a memory leak, because the previous pointer gets lost.

IMHO it would be better to let GS create the target bitmap with the proper dimensions:
BMAP* bmNew = bmap_createblack(bmp.width, bmp.height,bmap_format(bmp));
... and then do the rest of the copy stuff.