I faced the same problem just recently.
And I've found a way of getting a better path. In my case, I was trying to visualise the effect of having the Panama and Suez canals.
My suggestion isn't going to help you find the exact distance, however - but it will trace a more realistic minimum cost path which should be closer in length to the real optimum.
You've got a uniform cost value for the sea, and a high cost value for land. So far, so good.
When I did the least-cost path from Bristol, England to Sydney in Australia, the suggested path hugged the west coast of Africa, before rounding the cape and going in a straight line (line shown in red)
As whuber hinted at, this is caused by lots of local optimums not adding up to a global optimum.
The way I did it was to add peturbation, so that some randomness comes into play.
- add a random value raster in SAGA GIS ('Random field'), the same size as my cost surface
- and add this to my cost raster (Grid Sum in SAGA)
- trace the least cost route on the noisy raster.
In my case I added a value between 0 and 10, as I wasn't bothered about the actual distance, just a better path. I find uniform works better than guassian. I'm using 9999 as the land cost.
Now, with the randomised cost surface, I find the shortest path now crosses diagonally, rather than hugging coastlines. The orange route is the one based on the noisy raster...
In my case I'm using a python script (from the gdal python cookbook) to do the least-cost tracing as a raster, so you mileage may vary depending on how you do the point to point path tracing (I can't get r.drain to work at the moment with QGIS).