Templates with variables - passing sensor state works but not attribute

are these template entities? If yes, variables for template entities only get resolved on configuration load, they do not update live before resolution of the state. Which is why it only works when you hardcode the value.

With that being said, do this instead:

      - unique_id: weather_display_hourly_icon0
        variables:
          <<: &conditions
            fallback:
              icon: "\uF00D"
            conditions:
              clear: 
                icon: "\uF00D"
              cloudy: 
                icon: "\uF013"
              cyclone: 
                icon: "\uF0C1"
              dust: 
                icon: "\uF082"
              dusty: 
                icon: "\uF082"
              fog: 
                icon: "\uF014"
              frost: 
                icon: "\uF076"
              haze: 
                icon: "\uF021"
              hazy: 
                icon: "\uF021"
              heavy_shower: 
                icon: "\uF008"
              heavy_showers: 
                icon: "\uF008"
              light_rain: 
                icon: "\uF01A"
              light_shower: 
                icon: "\uF009"
              light_showers: 
                icon: "\uF00A"
              mostly_sunny: 
                icon: "\uF00C"
              partly_cloudy: 
                icon: "\uF002"
              rain: 
                icon: "\uF019"
              rainy: 
                icon: "\uF019"
              shower: 
                icon: "\uF009"
              showers: 
                icon: "\uF009"
              snow: 
                icon: "\uF01B"
              snowy: 
                icon: "\uF01B"
              storm: 
                icon: "\uF01E"
              storms: 
                icon: "\uF01E"
              sunny: 
                icon: "\uF00D"
              tropical_cyclone: 
                icon: "\uF073"
              wind: 
                icon: "\uF050"
              windy: 
                icon: "\uF050"
        state: >
          {% set descriptor = states('sensor.rutherglen_icon_descriptor_0') %}
          {{ conditions.get(descriptor, fallback).icon }}

Then using it…

      - unique_id: weather_display_hourly_icon1
        variables:
          <<: *conditions
        state: >
          {% set descriptor = states('sensor.rutherglen_icon_descriptor_1') %}
          {{ conditions.get(descriptor, fallback).icon }}