Claro, no puedes iniciar un servicio que ya se encuentra iniciado, ni detener uno que ya está detenido.
De todas formas no dás ningún detalle acerca del error, solo dices que "falla", podrías haber mostrado la excepción porque no somos magos para adivinar lo que ocurre.
Pero deduzco que el problema es ese porque en tu código no compruebas el estado del servicio. solo puede ser eso, o que el servicio no se pueda detener por alguna dependencia.
Usa un convertidor online de VBNET a C# con esta función que hice, y listo:
#Region " Change Service Status "
 
    ' [ Change Service Status Function ]
    '
    ' // By Elektro H@cker
    '
    ' Instructions :
    ' Add a reference for "System.ServiceProcess"
    '
    ' Examples :
    ' MsgBox(Change_Service_Status("Temas", Service.StopIt))
    ' MsgBox(Change_Service_Status("Temas", Service.RunIt, True))
 
    Public Enum Service
        RunIt = True
        StopIt = False
    End Enum
 
    Function Change_Service_Status(ByVal ServiceName As String, _
                                   ByVal Run As Service, _
                                   Optional Wait As Boolean = False) As Boolean
 
        Try
            Dim Service As New System.ServiceProcess.ServiceController(ServiceName)
 
            Select Case Service.Status
                Case System.ServiceProcess.ServiceControllerStatus.Stopped And Run
                    Service.Start()
                    If Wait Then Service.WaitForStatus(System.ServiceProcess.ServiceControllerStatus.Running)
                Case System.ServiceProcess.ServiceControllerStatus.Running And Not Run
                    Service.Stop()
                    If Wait Then Service.WaitForStatus(System.ServiceProcess.ServiceControllerStatus.Stopped)
            End Select
 
            Service.Dispose()
            Return True
 
        Catch ex As Exception
            ' Throw New Exception(ex.Message)
            Return False
        End Try
 
    End Function
 
#End Region
Saludos.