The problem is in the method fillDataTitleLink(array $options) in vendor/magento/module-downloadable-import-export/Import/Product/Type/Downloadable.php.
It does a select query from the downloadable_link table, with a left join on the downloadable_link_price table, on link_id and website_id.
However, since the row has not yet been inserted into the downloadable_link table, the result of the query fills link_id and website_id as NULL.
Then, when setting the var $existOption, it calls fillExistOptions($this->dataLinkPrice, $option, $existingOptions).
fillExistOptions sets the result using array_replace($base, $option, $existingOption). This replaces link_id and website_id with NULL, which ultimately causes the error. It returns $result['price'] with the null values, which is then used in saveLinkOptions() as $dataLink['price'] in insertOnDuplicate(...).
fillDataTitleLink() is called in saveLinkOptions() BEFORE the latter method inserts the row into the downloadable_link_price table.
The only solution I have found so far, and it has been working for me, is to add this in fillDataTitleLink, after $existingOptions is set with the select query:
foreach($existingOptions as $k=>$v):
if($k['website_id'] == NULL):
$existingOptions[$k]['website_id'] = self::DEFAULT_WEBSITE_ID;
Still investigating if there's a better way to solve it.