I recommend that you create a procedure that uses a cursor to accomplish your goal. Iterating over one of the three tables, it should be a pretty straightforward process.
MySQL Cursors: http://dev.mysql.com/doc/refman/5.0/en/cursors.html
Edit: The following stored MySQL script creates and calls a stored procedure that correctly reproduces the results you're looking for:
DELIMITER $$
DROP PROCEDURE IF EXISTS `computeBuyouts` $$
CREATE PROCEDURE `computeBuyouts` ()
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE o, b VARCHAR(32);
DECLARE bc FLOAT;
DECLARE cur CURSOR FOR SELECT Owner,Buyer FROM Buyout;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN cur;
read_loop: LOOP
FETCH cur INTO o, b;
IF done THEN
LEAVE read_loop;
END IF;
SET bc = 0;
-- compute the sum of products of each value/percentage pair for all locations
SELECT SUM(v.Value * pp.Percentage) INTO bc FROM Value v LEFT JOIN (PurchasePercentage pp) ON (v.Location = pp.Location) where v.Owner = o and pp.Buyer = b group by v.Owner;
INSERT INTO PossibleBuyouts VALUES (o, b, bc);
END LOOP;
CLOSE cur;
END $$
DELIMITER ;
CALL computeBuyouts();
Hope that helps. At the table sizes you mentioned, this should complete extremely quickly.