Thanks Abdel,
AE seems to render a black frame on the end of H264 videos, but doesn't have that problem with Prores. I've tried many files, including the unprocessed loop file from Shutterstock.
After some experimentation, adding a slice as late in the cue as possible (possibly 1 frame?) then setting the first slice to infinite makes a much better loop, albeit with sacrificing one or two frames to make the loop seamless. Either way it's more acceptable than just clicking the loop button. I'm also seeing stuttering when a cue ends, so I'm wondering if if it's a disk read issue... my Macbook Pro has an SSD, but as it's running High Sierra it uses APFS so perhaps that's not yet tested thoroughly enough with QLab.