Eventually sorted this out on my own. Simple answer is NO, this is not the purpose of Price Resolvers. Price Resolvers can be used to "statically" set a price based on something which does not change during the php session - such as location, year, etc. But if you need to modify the price due to user input at the time; the correct solution is to set the Unit Price.
Before looking at Resolvers I already had this code:
$order_item = OrderItem::create([
'type' => $item_type,
'purchased_entity' => $variation->id(),
'quantity' => isset($options['qty']) ? $options['qty'] : 1,
'unit_price' => $my_dynamic_price,
]);
and I have seen posts and had been given suggestions that this works. It does not. Setting the unit_price at the time of OrderItem::create has no impact on the item's price. The correct way to do this is with the setUnitPrice() method like this:
$order_item = OrderItem::create([
'type' => $item_type,
'purchased_entity' => $variation->id(),
'quantity' => isset($options['qty']) ? $options['qty'] : 1,
'unit_price' => $variation->getPrice(), // may be overwritten by $options['cost']
]);
// If we are setting a custom cost, override unit_price now.
if (isset($options['cost']) && $options['cost']) {
$order_item->setUnitPrice($options['cost'], TRUE);;
}
$order_item->save();