This is as close as I have got with creating a true mesh entity copy.
Textures must applied via brushes for them to copy.
Function CopyMeshEntity(mesh,parent=0)
local surf,scount,count,tricount
local sbrush,newsurf,crner,vcrner,vert
NewMesh = createmesh(parent)
; NewMesh = copymesh(mesh)
if parent = 0 then entityparent NewMesh,getparent(mesh)
EntBrush=GetEntityBrush(Mesh)
paintentity NewMesh,EntBrush
For scount = 1 To countsurfaces(Mesh)
surf=GetSurface(Mesh,scount)
NewBrush=GetSurfaceBrush(surf)
;NewSurf = GetSurface(NewMesh,scount); If copymesh is used
NewSurf = createsurface(NewMesh,NewBrush)
;CopyMesh Replacement
for count = 0 to counttriangles(surf)-1
for crner = 0 to 2
vcrner = TriangleVertex(surf,count,crner)
vert=addvertex(NewSurf,vertexx(surf,vcrner),vertexy(surf,vcrner),vertexz(surf,vcrner),vertexu(surf,vcrner),vertexv(surf,vcrner))
vertexcolor NewSurf,vert,vertexred(surf,vcrner),vertexgreen(surf,vcrner),vertexblue(surf,vcrner)
next
AddTriangle (NewSurf,vert-2,vert-1,vert)
next
freebrush Newbrush
; if EntBrush>1 then freebrush Entbrush
next
return NewMesh
end function
Not perfect but it does what I need for now!