Can't seem to set volume_level based on itself from data_template

you could always just use an equation. FWIW a new compensation integration is coming through that allows you to fit polynomials to datasets, you have a dataset. You can then use the coefficients to do the math for you.

Anyways, here’s the equation that would work for you for any rotation

service: media_player.volume_set
entity_id: media_player.onkyo_tx_nr717
data_template:
  volume_level: >-
    {% set e = trigger.event.data.event | int %}
    {% set v = state_attr('media_player.onkyo_tx_nr717', 'volume_level')|round(2) %}
    {{ v + 0.0000625 * e }}

when the new compensation integration is built, you can use it to make fits for you and give you the coefficients

compensation:
  media_player_onkyo:
    entity_id: media_player.onkyo_tx_nr717
    attribute: volume_level
    data_points:
    - 0.5 -> 8000
    - 0.25 -> 4000
    - 0 -> 0
    - -0.25 -> -4000
    - -0.5 -> -8000
service: media_player.volume_set
entity_id: media_player.onkyo_tx_nr717
data_template:
  volume_level: >-
    {% set e = trigger.event.data.event | int %}
    {% set v = state_attr('media_player.onkyo_tx_nr717', 'volume_level')|round(2) %}
    {% set c = state_attr('sensor.media_player_onkyo', 'coefficients')[0] %}
    {{ v + 1 / c * e }}