Ignore Whitespace should also ignore whitespace inside of lines as well
"if (foo)" is semantically the same as "if ( foo )" but the diff counts those as changes when ignore whitespace is on.
Well, semantic doesn't work at this level. It doesn't consider semantic diffs inside method blocks.
That being said, for C# there's an option to ignore "format changes" as the one you propose. Check http://blog.semanticmerge.com/2014/05/skip-format-conflicts-with-new.html