This is an issue I caused myself by using a stored procedure to insert rows into a temp table.
Since there is no way to control in what order report elements, datasets, etc run, sometimes the report grabbed the old data from the tmp table before I had a chance to delete and re-insert.
So re-wrote stored procedure to just return the id list I was looking for, that now populates my internal parameter and works fine.