Without code to look at we all can start guessing :) my guess is either you are not using the proper offset field or you are allocating from different memory pool.
From quick glimpse ttm_bo_allocate in via/init_ttm.c loose the
TTM_PL_FLAG_NO_EVICT so you vq buffer is not allocated with the no evict flags, then i guess it got evicted on first bo allocation which is strange, maybe first bo has some lpfn constraint.
Tried it and it didn't help. Its the ttm_buffer_object offset that should vary for each buffer object created from some memory pool. That offset is set from bo->mem.mm_node if it is present. Looking at the code ttm_bo_init should end up calling ttm_bo_move_buffer which should in turn set up the bo->mem.mm_node. I guess I really need to debug the code to see what is going on.