You can use TakeWhile:
int s = 0;
var subgroup = people.OrderBy(x => x.Amount)
.TakeWhile(x => (s += x.Amount) < 1000)
.ToList();
Note: You mention in your post first x people. One could interpret this as the ones having the smallest amount that adds up until 1000 is reached. So, I used OrderBy. But you can substitute this with OrderByDescending if you want to start fetching from the person having the highest amount.
Edit:
To make it select one more item from the list you can use:
.TakeWhile(x => {
bool bExceeds = s > 1000;
s += x.Amount;
return !bExceeds;
})
The TakeWhile here examines the s value from the previous iteration, so it will take one more, just to be sure 1000 has been exceeded.