You can use the CellValidated event to process data after a successful validation, e.g.
vb.net Code:
  1. Imports System.Globalization
  2. Imports System.Runtime.CompilerServices
  3.  
  4. Public Module StringExtensions
  5.  
  6.     <Extension>
  7.     Public Function ToTitle(source As String) As String
  8.         Return CultureInfo.CurrentCulture.TextInfo.ToTitleCase(source)
  9.     End Function
  10.  
  11. End Module
vb.net Code:
  1. Private Sub DataGridView1_CellValidating(sender As Object, e As DataGridViewCellValidatingEventArgs) Handles DataGridView1.CellValidating
  2.     Dim columnIndex = e.ColumnIndex
  3.  
  4.     If columnIndex = 0 Then
  5.         Dim validValues = {"In Process", "Completed", "Cancelled"}
  6.         Dim cellValue = CStr(e.FormattedValue)
  7.  
  8.         If Not validValues.Any(Function(s) String.Equals(cellValue, s, StringComparison.CurrentCultureIgnoreCase)) Then
  9.             MessageBox.Show("The Status value is incorrect!  It must be 'In Process', 'Completed' or 'Canceled'")
  10.             e.Cancel = True
  11.         End If
  12.     End If
  13. End Sub
  14.  
  15. Private Sub DataGridView1_CellValidated(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellValidated
  16.     Dim columnIndex = e.ColumnIndex
  17.  
  18.     If columnIndex = 0 Then
  19.         Dim cell = DataGridView1(columnIndex, e.RowIndex)
  20.         Dim cellValue = CStr(cell.Value)
  21.  
  22.         cell.Value = cellValue.ToTitle()
  23.     End If
  24. End Sub
As for actually formatting the input, what's the point? You already have the values with the correct casing written in your code twice so why not just use hard-coded values that already have the correct case?
vb.net Code:
  1. Private validValues As String() = {"In Process", "Completed", "Cancelled"}
  2.  
  3.  
  4. Private Sub DataGridView1_CellValidating(sender As Object, e As DataGridViewCellValidatingEventArgs) Handles DataGridView1.CellValidating
  5.     Dim columnIndex = e.ColumnIndex
  6.  
  7.     If columnIndex = 0 Then
  8.         Dim cellValue = CStr(e.FormattedValue)
  9.  
  10.         If Not validValues.Any(Function(s) String.Equals(cellValue, s, StringComparison.CurrentCultureIgnoreCase)) Then
  11.             MessageBox.Show("The Status value is incorrect!  It must be 'In Process', 'Completed' or 'Canceled'")
  12.             e.Cancel = True
  13.         End If
  14.     End If
  15. End Sub
  16.  
  17. Private Sub DataGridView1_CellValidated(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellValidated
  18.     Dim columnIndex = e.ColumnIndex
  19.  
  20.     If columnIndex = 0 Then
  21.         Dim cell = DataGridView1(columnIndex, e.RowIndex)
  22.         Dim cellValue = CStr(cell.Value)
  23.  
  24.         cell.Value = validValues.First(Function(s) String.Equals(cellValue, s, StringComparison.CurrentCultureIgnoreCase))
  25.     End If
  26. End Sub
That said, why not just use a combo box column for this and have them select the appropriate value with the appropriate casing? It's less typing for the user and avoids any mistyping too.