The top script produces 6 cells with 0 in them and the bottom script produces 5 cells with zero in them. It seems to me that these should produce the same result?
You're using two different types of indexing. In the first case you're calling v with two vectors, and the output in such a case is "the Cartesian product of the indices in the respective dimensions". so an assignment of 0 to the locations included in that call will include all combinations of (a,b). a includes 2, 3, and 4 and b includes 2, 3, so your assignment goes into the same cells you would get from v([2:4,2:3]).
in the second case, you're using linear indexing. c is a vector of five positions of >100 valued elements
>> c = find(v>100) c =
8 9 12 13 14
the linear index refers to the position of elements of v as they are stored in memory. (the order is column-wise, so 68, 95, 68, 98, 94, 73, 85, ...), just like you would get from the output of v(:)
an assignment to v(c) is an assignment to just those 5 elements.