The ‘renoise.song().instruments[].samples[].loop_end’ property is inconsistent with the ‘loop_start’ and ‘slice_markers’ properties. Those two have their values as the waveform sample value + 1, while ‘loop_end’ is just the value.
Edit - Seems to be because for 'loop_end', you're interested in the value that just played. Understandable but still inconsistent, so when you're getting values for a loop using slice markers remember to -1 the 'end' marker.