OK, so this isn't as pretty as the lambda expressions and I'm still a little fuzzy on what exactly the where clause needs to be since PointsName can't be Level and Buy Price at the same time, but I needed to start the conversation somewhere. I'm guessing that you'll need to do 2 joins on the points table but since you know your setup better than I, I'm guessing you'll be able to take this and modify it as needed. Let me know what I'm missing...
var items = (From items in context.InventoryItems
join itemPoints in context.InventoryItemPoints on items.InventoryItemID equals itemPoints.InventoryItemID
join points in context.Points on itemPoints.pointsID equals points.pointsID
where (points.pointsName == "Level" && itemPoints.pointsValue == maxStoreLevel) && points.pointsName == "Buy Price"
select items).Distinct();
I knew the original wouldn't return rows as there was no way for the points name to have both values but based off your subsequent update, I think what you need is:
var items = (From items in context.InventoryItems
join levelItemPoints in context.InventoryItemPoints on items.InventoryItemID equals levelItemPoints.InventoryItemID
join levelPoints in context.Points on levelItemPoints.pointsID equals levelPoints.pointsID
join priceItemPoints in context.InventoryItemPoints on items.InventoryItemID equals priceItemPoints.InventoryItemID
join pricePoints in context.Points on priceItemPoints.pointsID equals pricePoints.pointsID
where (levelPoints.pointsName == "Level" && levelItemPoints.pointsValue == maxStoreLevel) && pricePoints.pointsName == "Buy Price"
select items).Distinct();