es que si la intentara leer fuera del IF ya no le dejaría ni debugar...A veces puede pasar por despiste que declares una variable, por ej. dentro de un Try,  y luego la quieres leer fuera, y ya te da error antes de debugar...
 
Si mal no he entendido, él no puede leerla ni al momento ¿correcto? Es decir aquí: 
 Dim miTarifa As String = dR("Tarifa")   
Yo es que he probado su mismo código, es más tengo aplicaciones con variables declaradas así, y funciona bien... 
Lo he probado incluso en VB2005, por si era alguna particularidad de esta versión, y me funciona igualmente bien. He creado un módulo con una función y he declarado la varibale dentro del IF:  
 Cita:   Dim dR As OleDb.OleDbDataReader = miCM.ExecuteReader
        If dR.Read Then
            Dim miTarifa As String = dR("Tarifa")
            Dim miGrupoDescuento As String = dR("GrupoDescuento")
            Return miTarifa
        Else
            miConn.Dispose()
            Throw New Exception("El cliente especificado no existe.")
        End If
    Entra y devuleve bien el valor.... 
¿tienes el VB2005 con las últimas actualizaciones? Es por descartar...porque es muy raro. A mi me habían pasado cosas raras en VB2003 y era porque me faltaba una actualización.  
saludos