meta_compare seems to be treating values as strings instead of integers as expected
See this question and my answer there query_posts ->using meta_compare / where meta value is smaller or greater or equals… Basically for the purpose of meta comparison value is always treated as string, because it is passed as such to $wpdb->prepare() method.