Grades não estruturadas têm seu lugar.
Você pode consultar a ESMF (Earth System Modeling Framework). Eles têm algum código para reorganizar - especificamente para esse fim - e também fizeram algumas coisas bacanas com código paralelo. Todo o sistema foi projetado para acoplar modelos, portanto também pode haver outras coisas úteis.
Algumas outras notas:
"nenhuma maneira de fazer isso de forma eficiente para um número significativo de pontos"
bem, eficiente é uma coisa relativa - uma vez que você tenha a grade em uma estrutura de árvore, poderá pesquisá-la em O (logn), que pode ser bem rápido, embora não em O (1), como pesquisar em uma grade regular é.
Além disso, parece que enquanto a interpolação precisa ser feita a cada passo, se as grades não estiverem se adaptando, o mapeamento de uma grade para outra permanece constante. Portanto, você pode calcular esse mapeamento (ou seja, qual elemento em cada grade corresponde a qual elemento na outra) da maneira que for mais conveniente, armazená-lo e nunca mais precisar computá-lo novamente (até que as grades mudem).
Isso deixa você com o código de interpolação - onde você deseja equilibrar precisão e desempenho - a interpolação linear simples através de um triângulo é rápida e pode ser boa o suficiente.
"Pensei em usar o kd-tree para pesquisar o nó mais próximo de um determinado ponto, então usaria as funções de forma desse elemento"
lembre-se de que o nó mais próximo não recebe o elemento - então você precisará fazer um pouco mais para encontrar o elemento que deseja. Uma opção seria usar uma rtree, que armazena / pesquisa por caixa delimitadora - você obterá mais de um elemento a cada pesquisa, mas poderá verificar qual deles está correto diretamente.