I found a workaround in case anyone's interested... For some reason Ungroup only fails when the image is pasted into a newly created slide, but works fine if the image is pasted onto an existing slide. So the solution is to paste it into the last existing slide, ungroup it, create the new slide, cut the ungrouped ShapeRange and paste into the new slide... Here's the code:
function fig2ppt( h_mat )
%FIG2PPT Copy figure in h_mat and paste in currently open PowerPoint
%presentation. It will add a new slide at the end before pasting.
pp = actxserver('PowerPoint.Application');
pres = pp.Presentation.Item(1);
pres.Slides.AddSlide(pres.Slides.Count+1,pres.SlideMaster.CustomLayouts.Item(7));
print(h_mat,'-clipboard','-dmeta')
h_ppt = pres.Slides.Item(pres.Slides.Count-1).Shapes.Paste;
h_ppt.Align('msoAlignMiddles','msoTrue');
h_ppt.Align('msoAlignCenters','msoTrue');
h_ppt = h_ppt.Ungroup;
h_ppt.Cut;
pres.Slides.Item(pres.Slides.Count).Shapes.Paste;
delete(pp)
end