Update on this issue:
It turns out that using frame:SetClipsChildren is not the best solution here. SetClipsChildren causes all children of the ScrollFrame to be clipped if they are outside the viewport - including ScrollBars.
The fix I have just found is to set the parent of the ScrollFrame to have the "toplevel" attribute. It may work by setting the ScrollFrame itself to be toplevel, I haven't tested that.
Code:
frame:SetToplevel(true)