Quase EXATA mesma pergunta respondida aqui . A premissa é que você precisaria de outra coluna para atuar como um total corrente para o cliente em questão...
Eu criei uma tabela e simulei dados exatamente como seus resultados e cheguei aos SEUS resultados exatos... O problema era que, de alguma forma, o MySQL estava aplicando os critérios DUAS VEZES por linha e não entendia como ou por quê... Eu suspeito FORTEMENTE que seja um bug, mas não posso descrevê-lo. De qualquer forma, eu tenho uma correção que força uma "PreQuery" interna como base e retorna TODOS os registros com o @SQLVars e, em seguida, aplico uma cláusula WHERE disso ...
select properSummed.*
from
( select
o.orderid,
o.price,
@RunningTotal := @RunningTotal + o.price as UnpaidSoFar
from
orders o,
(select @RunningTotal := 0 ) sqlvars
where o.ownerid = 1
and o.paymentstatus = 'unpaid' ) properSummed
where
properSummed.UnpaidSoFar <= 50