Yes, you are absolutely correct - bin location should be at the Inventory Item level, not the Product level. When we added the Bin Location field a few years ago we just needed something very basic (and easy to implement) in order to handle bin locations for all products / items. It was a design decision that was always meant to be refactored once we had more resources.
The current data model supports multiple levels of locations so it's possible to have sub-locations (i.e. bin locations) that could be used to represent the putaway areas within a location. However, I created a larger issue by using the Inventory Item class to represent a global Product Lot table instead of what it should represent. In other words, if you've had a chance to look at the code you'll notice that Inventory Item does not have a location. You can read about this in the following ticket
https://github.com/openboxes/openboxes/issues/21.
The gist is that I need to refactor the current Inventory Item class to play the role of a global Product Lot table and then refactor Inventory Item to include (ProductLot, Location, QoH, QATP, etc). I was going to tackle it once I finished the Grails 2.5.5 upgrade (which is taking forever) because I wanted to avoid having to resolve all of the conflicts that might be generated by working on both branches at the same time. With that said, it might not generate as many conflicts as I'm thinking but the data migration could be somewhat complicated.
One thing to note regarding your user story is that I would actually recommend that you create separate products for each size. OpenBoxes doesn't specifically have a concept of a Product Variant, but there's something called a Product Group (a.k.a Generic Product) that is used to group similar / equivalent products (a.k.a product variants) together. Eventually, this will be expanded to allow you to create typed product groups (i.e. accessories, bundles, substitutes, equivalents, etc).
Anyways, would love some help if you're really interested. If you'd like to discuss it in more detail, we can try to set up a call in the next week or so. You can usually find me in Slack
http://slack-signup.openboxes.com/ during business hours (Central Time)