I noticed some unnecessary usage of braces, as well as some duplication of IF statements.
Since I don't have the text files in order to test this properly, here's a little re-write with the modifications made. This might be sufficient to resolve your problem. Please ensure that you let us know, one way or the other.
Code:
alias FAHREAD {
  scid 1 
  if ($status != connected) {      
    if (%udaline > %udaline.bak) {
      set %udaline %udaline.bak
    }
    set %udanumlines $lines(D:\program files\UD monitor\UDm Logs\Log.txt)
    if (%udaline > %udanumlines) {
      set %udaline 0
    }
    if (%udaline < %udanumlines) {
      inc %udaline 
      msg #ubergeeks $read(D:\program files\UD monitor\UDm Logs\Log.txt,%udaline)
    }
    if (%wuline > %wuline.bak) {
      set %wuline %wuline.bak
    }
    set %wunumlines $lines(D:\program files\UD Monitor\UDm Logs\WUs.txt)
    if (%wuline > %wunumlines) {
      set %wuline 0  
    }
    while (%wuline < %wunumlines) {
      inc %wuline
      msg #ubergeeks $read(D:\program files\UD monitor\UDm Logs\WUs.txt,%wuline)
    }
    set %fahnumlines $lines(D:\program files\folding@home\FAHlog.txt)
    if (%fahline > %fahline.bak) {      
      set %fahline %fahline.bak    
    }
    if (%fahline > %fahnumlines) {       
      set %fahline 0    
    }
    if ($calc(%fahnumlines - %fahline) < 6) {
      while (%fahline < %fahnumlines) {
        inc %fahline
        while ($remove($read(D:\program files\folding@home\FAHlog.txt,%fahline),$chr(35)) == $null) {
          inc %fahline
        }
        msg #ubergeeks $remove($read(D:\program files\folding@home\FAHlog.txt,%fahline),$chr(35))
      }
    }
    else { 
      inc %fahline
      while ($remove($read(D:\program files\folding@home\FAHlog.txt,%fahline),$chr(35)) == $null) {
        inc %fahline
      }
      msg #ubergeeks $remove($read(D:\program files\folding@home\FAHlog.txt,%fahline),$chr(35))
    }
  }
  set %fahline.bak %fahline
  set %udaline.bak %udaline
  set %wuline.bak %wuline
}