This is how meta_key/_values work. How you store your values is case sensitive.
Example meta_key = "foo' and meta_value="Bar"
Would return the result you are looking for:
$posts = new WP_Query( 'post_type=post&meta_key=foo&meta_value=Bar' );
Would not return the result you are looking for:
$posts = new WP_Query( 'post_type=post&meta_key=foo&meta_value=bar' );
However it does appear that your database can be setup as case insinsitive and cause some issues.
Please note that if your database collation is case insensitive (has with suffix _ci) then update_post_meta and delete_post_meta and get_posts will update/delete/query the meta records with keys that are upper or lower case. However get_post_meta will apparently be case sensitive due to WordPress caching. See https://core.trac.wordpress.org/ticket/18210 for more info.
Reference: update_post_meta for more info