One reason why you may be experiencing the problem you describe is because you may be allocating the query task again and again in the loop. The following line of code -
self.queryTask = [AGSQueryTask queryTaskWithURL:[NSURL URLWithString:waterLayerURL]];
will release the previous instance of query task and create a new one. When the previous one is released, it will no longer invoke the delegate. (for more information, refer to apple's doc on objective-C properties)
If all your queries are against the same service, you should create the task only once, and call executeWithQuery: in a loop for each query.