If you are always using a fixed value, you an use exists to find records which match the condition in the other tables:
UPDATE ORDERDETAIL OD
SET OD.PRODUCTID = 'BASE1'
WHERE EXISTS (
  SELECT NULL
  FROM CUSTOMER C
  JOIN ORDERS O ON O.CUSTOMERID = C.CUSTOMERID
  WHERE C.FIRSTNAME = 'JANE'
  AND C.LASTNAME = 'DOE'
  AND O.ORDERID = OD.ORDERID
);
Or a subquery:
UPDATE ORDERDETAIL OD
SET OD.PRODUCTID = 'BASE1'
WHERE OD.ORDERID IN (
  SELECT O.ORDERID
  FROM CUSTOMER C
  JOIN ORDERS O ON O.CUSTOMERID = C.CUSTOMERID
  WHERE C.FIRSTNAME = 'JANE'
  AND C.LASTNAME = 'DOE'
);
Oracle doesn't allow you to have a join directly in the update statement. If you were getting the new value from the other table as well you would something like this.