Assuming that you want to run those 4 cycles of the subset within a single session, here is some rough idea of how I might go about this ...
I would divide the session into two phases, a setup phase and an experiment run phase.
For the setup phase I would have a List for the pool of 16 stimulus IDs, let's call it SetupList. I would run SetupList in Random order for 8 samples. The Procedure for SetupList would run some InLine code to build a secondary List from the 8 samples, let's call that SubsetList. I could build SubsetList as a main List that runs a Procedure, or build it as a nested List -- I would probably do the latter as it seems neater, so let's assume that. Nothing else happens during the setup phase.
For the experiment running phase I present trials using SubsetList as a nested List. SubsetList is set to use Random order, and to reset after one cycle (8 samples). So I could simply use SubsetList for 4 cycles of 8 samples each, and for each cycle I would get the sames 8 selected stimulus IDs in a newly randomized order.
-- David McFarlane