I have managed to get this to work by assigning the contents of the cell to a string and then putting them back in the cell - it's inelegant but it works - I'm hoping someone might be able to assist with a better solution though.
Sub ToggleTableHighlight(oTbl As Table)
Dim x As Long
Dim y As Long
Dim strCell As String
With oTbl
    For x = 1 To .Rows.Count
        For y = 1 To .Columns.Count
            If .Cell(x, y).Selected Then
                If .Cell(x, y).Shape.Fill.Visible = msoFalse Then
                    .Cell(x, y).Shape.Fill.Visible = msoTrue
                    .Cell(x, y).Shape.Fill.Solid
                    .Cell(x, y).Shape.Fill.ForeColor.RGB = RGB(255, 0, 0)
                Else
                    .Cell(x, y).Shape.Fill.Visible = msoFalse
                    strCell = .Cell(x, y).Shape.TextFrame.TextRange.Text
                    .Cell(x, y).Shape.TextFrame.TextRange.Text = strCell
                End If
            End If
        Next y
    Next x
End With
End Sub