Solved the problem in an ugly brute-force way by using spatialProfile and then eliminating all internal boundary points. Here's what I came up with;
%% Solution using spatialProfile
%note that the variable radius in function spatialProfile was edited (doubled) to solve an issue with
%line thickness
%first put list of rows (which equal id # from grains variable) into an array
[a]=find(parentId==mergedGrains(TwinNum).id);
%use midpoint of boundary x,y and spatial profile to get point list
out=spatialProfile(ebsd('magnesium'),mergedGrains(TwinNum).boundary.midPoint)
%remove all duplicate ebsd data points (this is a lot of them)
out1=unique(
out.id);
%remove all tiny grains <8 px
N=grains(ebsd(out1).grainId).grainSize;
Nlg=N>8;
%remove the ids that correspond to these grains
out2=out1(Nlg);
%now we have a list of EBSD orientations, both within and without the
%TwinNum. We must eliminate all within the matrix [a]
test=false(length(out2),1);
%now for each data point,
for i=1:length(out2)
%we want to keep it if it isn't in the list, so 1- logical
test(i)=1-any(ebsd(out2(i)).grainId==a);
end
%use this logical to remove values from the list of ebsd ids
out3=out2(test);
%this can be visualised as follows
%figure;plot(ebsd(out3),ebsd(out3).grainId)