So, in the end I ended up creating the bones using new() then I converted by absolute rotation to matrix and transformed the bone by that. Then after that I added the absolute position to both the head and the tail of each bone and that got me the correct result.
for i, node in enumerate(jms.nodes):
scene_node = edit_bones.new(name=NODE_NAME_PREFIX+node.name)
# Assign parent if index is valid.
scene_node.parent = scene_nodes.get(node.parent_index, None)
# If a node has multiple children we cannot connect its tail end
# to the children.
pos = absolute_transforms[i]['translation']
rot = absolute_transforms[i]['rotation']
# Bones when created start at 0 0 0 for their tail and head.
# We extend the tail so it sticks out a bit and signifies the direction.
scene_node.tail = (scene_node.bbone_x, 0.0, 0.0)
# We then rotate the bone by the absolute rotation that it should have.
scene_node.transform(rot.to_matrix(), scale=False)
# Then we add the absolute location to both the head and the tail.
scene_node.head += Vector(
(pos[0] * scale, pos[1] * scale, pos[2] * scale))
scene_node.tail += Vector(
(pos[0] * scale, pos[1] * scale, pos[2] * scale))