I figured it out! My solution makes use of the ButtonDownFilter property of the figure's mode object which is returned when entering the rotate3d mode. Here is the code:
f = figure;
s1 = subplot(2,1,1,'Parent',f);
s2 = subplot(2,1,2,'Parent',f);
[X,Y,Z] = peaks(25);
sf = surf(s1,X,Y,Z);
p = impoint(s2,0.5,0.5);
h = rotate3d(s1);
h.ButtonDownFilter = @turnOffRotate3d;
h.Enable = 'on';
s1.ButtonDownFcn = 'rotate3d(gca);'
The function turnOffRotate3d.m is defined as follows:
function [flag] = turnOffRotate3d(obj,event_obj)
% If the tag of the object is 'impoint', then return true
objTag = obj.Tag;
if strcmpi(objTag,'impoint')
flag = true;
else
flag = false;
end;
With this solution, clicking on the s1 axis turns on rotate3d mode, while clicking on the impoint turns rotate3d mode off.