Sorry, after all that, "calculating the array using a sine function" IS the right way to go. I tried transforming the PathPoints array of a text path with trig functions and after much tinkering got the following results:

It's the result of lots of scribbling diagrams on paper, half-remembered geometry and blind guesswork. So don't take the details too seriously, especially the trig code, as it may not work for text paths of different sizes. But it shows it can be done and it shouldn't take too much code. It's all on this form:
vb.net Code:
Imports System.Drawing.Drawing2D
Public Class OldCurvedTextForm
Private textPath As New GraphicsPath
Private newPath As GraphicsPath
Private textFont As Font = New Font("Georgia", 100, FontStyle.Regular, GraphicsUnit.Pixel)
Private textString As String = "THIS IS MY STRING"
Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
e.Graphics.SmoothingMode = SmoothingMode.HighQuality
e.Graphics.DrawPath(Pens.Gray, textPath)
e.Graphics.FillPath(Brushes.Yellow, newPath)
e.Graphics.DrawPath(Pens.Black, newPath)
End Sub
Private Sub OldCurvedTextForm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
textPath.AddString(textString, textFont.FontFamily, 0, 80, Point.Empty, Nothing)
newPath = CurvePath(textPath)
End Sub
Private Function CurvePath(ByVal inputPath As GraphicsPath) As GraphicsPath
Dim newPath As GraphicsPath
Dim w = inputPath.GetBounds.Width / 2
Dim h = inputPath.GetBounds.Height / 2
Using mtx As New Matrix
mtx.Translate(-w, -h)
inputPath.Transform(mtx)
End Using
Dim newPathPoints(inputPath.PathPoints.Count - 1) As PointF
For i As Integer = 0 To inputPath.PathPoints.Count - 1
Dim pf As PointF = inputPath.PathPoints(i)
Dim newX = pf.X * Math.Cos(pf.X / w / 2)
Dim newY = 2 * pf.Y / Math.Cos(pf.X / w)
newPathPoints(i) = New PointF(newX, newY)
Next
newPath = New GraphicsPath(newPathPoints, inputPath.PathTypes)
Using mtx As New Matrix
mtx.Translate(w, h)
inputPath.Transform(mtx)
mtx.Translate(0, 5 * h)
newPath.Transform(mtx)
End Using
Return newPath
End Function
End Class
BB