For posterity sake, I believe I've found a solution and thought I'd share.
I've taken the secondary datasource and secondary loop out of the equation and just made the groovy script getting run after the primary data source smarter. Now the single groovy script resets the initial property, fetches an random number of records from SQL, builds the output, and appends it to the property. This still left me with the problem where each invocation was trying to output every SQL record, so I also removed the primary datasource loop. The test now looks something like the following:
Property step
Primary Datasource (All records in table)
... Groovy script to reset property in property step, fetch data from SQL, package it up, and append it to the property step.
... Issue Soap Request (involving data from the primary datasource and the appended property)
I'm trusting that with each invocation in LoadUI, the datasource is getting staying constant and just moving a cursor.