Мда... Ответ настолько прост, что я смотрю никто и не задался вопросом, что означает conn.CursorLocation = 2.
2 — adUseServer — курсор открываемый на сервере(причем это значение идет как DEFAULT, смотрите MSDN Using Cursors with ADO). Все что нужно сделать, так это выставить conn.CursorLocation = 3 — adUseClient, открывать курсор у клиента,
а не на сервере(там курсор делает DEALLOCATE после первого же resultset).
И этот вопрос задан из практики. Помню я на нем день потерял. Мне нужно было вернуть расчеты из одной SP в разных таблицах, так как делал это еще с db-library.