I'm not sure what is confusing here.
$span(hour_delta=720).length gives us a ValueHelper whose included ValueTuple covers a span of 720 * 3600 seconds. If the 720 hour period covers a DST start time the actual span will be 719 * 3600 seconds due to WeeWX being DST unaware. The
.day converts the number of seconds to decimal days, assuming a DST start time is included the result is 29.958333 days (29 + 23/24ths). The
.format("%d") simply formats this number as an integer giving the expected 29.
The .long_form applies slightly different formatting. Again assuming the hour_delta=720 covers a DST start time, and due to WeeWX DST naivety, the $span(hour_delta=720).length gives us a ValueHelper whose included ValueTuple covers a span of 719 * 3600 seconds. .long_form formats a span in seconds using a longer, human friendly format; if using the defaults an 'hours, minutes, seconds' format will be used. Since we have exactly 719 hours in the span the result is '719 hours, 0 minutes, 0 seconds'.
There are no rounding errors as such, just two different tags applying slightly different formatting. Perhaps there is something else that is confusing that I am not seeing.
Gary