(first you are mixing syntax from bash (e.g. $((...)), while using #!/bin/sh as the interpreter so it is difficult to say with certainty what will happen.) If you are getting numeric evaluation from $((...)), your shell (whichever that may be) is interpreting the $((...)) correctly
What is happening, and what you would expect in bash, etc. is that i is being incremented explicitly when you call $((i++)) inside the loop. When you begin the script, you set i=1 and it maintains that value until you begin to loop. When you start your loop, e.g.:
for day in mon tue wed thu fri
do
The loop variable is day, so day will take the values mon, tue, wed, thu and fri on each successive iteration through the loop. i however will increase by 1 on each iteration:
echo "weekday $((i++)) : $day"
What is happening is $((i++)) is the same as i=$((i+1)), (or i=$(expr $i + 1) if you are more familiar with that). The arithmetic syntax you are using can be used for tests itself or for arithmetic. If called without the leading '$', the mathematical expression between the ((..)) is evaluated and all variable values updated.
If called with the leading '$', then the same evaluation/update occurs, but the value is dereferenced and the value of the expression is made available at the point of dereference, no different that doing the same to a variable. (e.g. i=1; echo "i $i").
In your case you are both evaluating (with the post-increment operator) and dereferencing with the '$' in echo "weekday $((i++)) : $day". So you would expect it to output:
weekday 1 : mon
weekday 2 : tue
as i is updated during each loop until i=3, then you would expect the loop to be exited with:
if [ $i -eq 3 ];then
break;
fi
Which is what occurs. Let me know if you have any additional questions.
Note: The $((...)) syntax is not part of the POSIX shell specification, so I would not expect your script to be portable using #!/bin/sh. In reality many distribution simply softlink /bin/sh -> /bin/bash, so I suspect that is what is happening in your case.