The sound is probably too far away to be heard. execute as <entity> doesn’t change the position that the command is executed from, so the sound will still play from the world origin even though the cushion is making the sound. Try execute as @e[type=cushion] at @s ...
brief code analysis: FloatTag.getAsLong does not call floor in the conversion, as opposed to getAsByte, getAsShort, getAsInt, and DoubleTag.getAsLong which all do. that is the cause of the inconsistent behavior
The scoreboard case is slightly different than the linked report (although
/scoreboardis mentioned there) because the name of the scoreboard is not a namespaced identifier. This means that unlike/data,/attribute, etc., it is impossible to delete the scoreboard objective once it is created, because you cannot useminecraft:to refer to the same identifier.