Non è un bug...ma ignoranza mia...il datagridview considera i dati come testo e non come valore.
Ho googlato un pò e per risolvere non ho trovato altra soluzione che quella di usare un dataset e specificare il tipo di dati della colonna, esempio:
	codice:
	Imports System.ComponentModel
Public Class Form1
    Dim ds As New Data.DataSet
    Private Sub Form1_Load() Handles MyBase.Load
        ds.DataSetName = "prova"
        ds.Tables.Add("colonne")
        ds.Tables("colonne").Columns.Add("numero")
        ds.Tables("colonne").Columns("numero").DataType = System.Type.GetType("System.Decimal")
        ds.Tables("colonne").Columns.Add("testo")
        DataGridView1.DataSource = ds.Tables(0)
    End Sub
    Private Sub Button1_Click() Handles Button1.Click
        DataGridView1.Sort(DataGridView1.Columns("numero"), ListSortDirection.Descending)
    End Sub
    Private Sub Button2_Click() Handles Button2.Click
        DataGridView1.Sort(DataGridView1.Columns("numero"), ListSortDirection.Ascending)
    End Sub
End Class
 
Con il dataset puoi anche salvare i dati e caricarli.
 