iff and if
In my experience, students who have a solid grasp of first-order logic have absolutely no problem with the inconsistent use of "if" in definitions. The problem is that most students don't, and as I've personally observed, often confuse between "if" and "iff" precisely because of such notational issues. Therefore the answer to your first two questions is "No" and "Yes" for many students.
The reason it is extremely inconsistent to use "if" when "iff" is meant is because we commonly have the following two types of definitions:
We say that an X is A iff it satisfies P.
If an X is A, then define f(X) to be Y. [Here "f(X)" may be meaningless for an X that is not A!]
If you want concrete examples:
We say that a real number is rational iff it is the ratio of two integers.
If a set of real numbers $S$ is finite, define $\max(S)$ to be the maximum element of $S$.
Clearly, in the second type of definition, "if" is certainly not "iff". In a technical sense it is not even the material implication, but to satisfactorily deal with that we would have to use some form of type theory, which is beyond the scope of this answer.
As for your third question, I don't know any formal study conducted on this issue, but I have encountered some very ambiguous definitions before, where usage of "if" made it unclear whether "iff" was meant. At the moment I can't recall them, but I think it was an "if" that was buried in some complicated definition. Also, when definitions are understood as "iff" statements, then many proofs become trivial at least at the lower levels since often simply unfolding definitions yields the proof after one or two other small logical steps. In my experience, many students do not understand how to unfold the definitions both forward and backward to meet in the middle, and hence find many logically trivial theorems very hard to prove!
For your last question, you should simply use "iff" whenever you mean "iff", and tell students that some people don't and so they have to be careful when they read other mathematical writings and always check that they are certain which is meant.
Let and take
On an unrelated note, there is a similar notational inconsistency between the two common uses of "let". One is an instantiation of an existential assertion and the other is the creation of a new context of universal quantification:
[Where $S$ is a non-empty set:] Let $a \in S$. [This instantiates the non-emptiness of $S$.]
Take any $r \in \mathbb{Q}$ such that $r^2 = 6$. [Many people use "Let $r \in \mathbb{Q}$ such that $r^2 = 6$.".]
I personally strongly disapprove of using the same notation in both cases, since in the second example it is totally false to assert that there is such an $r$, and empirically students often do not know the logical structure of proofs and have great difficulty distinguishing between the two types if "let" is used in both cases. Some authors are careful to distinguish them, and one way is to use "take" or "given" for universal quantification.
Side remarks
A number of logicians I've spoken to agree with me on the above two notation issues, but they also say that they don't know what can be done about it, and their main reason is that "most of the textbooks and papers use it". I don't think that's too important in considering whether or not to continue using it, and indeed some of them thereafter try to unambiguously distinguish these in their own teaching.
The main problem is that teachers already know what they mean when they write "if" or "let", but they don't realize that most students don't know. The few that eventually grasp it fully are usually the only ones that become teachers of the next generation... And unlike a compiler that tells the programmer in his face that his program is meaningless (syntax error), mathematics teachers try hard to guess the students' meaning, usually giving benefit of doubt, and hence many students get away with random guesswork, simply because the teachers know how to modify their proofs to make it work.
Incidentally, you will never find the same kind of error in the programming world, because instantiation is equivalent to an assignment of a variable with the result of a function call, whereas quantification corresponds to a for-each loop. Similarly, programmers were the first to realize the great importance and utility of scoping, indicated by either braces or indentation, usually both. In the same way it would be excellent for mathematics students to learn this, and one way would be through teaching natural deduction in Fitch-style. Sadly, this is almost never done.
Lest you disbelieve me, I've regularly overheard students discussing among themselves how to prove a theorem, and invariably it goes:
To find limits we always write down "Let $ε > 0$." first...
The question is about injection, so write down "$f(a) = f(b)$"...
And worse still:
Let's try induction. If $n$ is true, ..., therefore $n+1$ is true.
Proof by induction: If $n = n+1$, ...
Imagine if people who have learn programming for 3 months still wrote:
int n; input(n);
if( n==true ) { ... }
if( n==n+1 ) { ... }
They don't, but why? It's because their compilers force them to learn something that mathematics teachers don't ensure their students learn, which is actual logical reasoning including conscious type-checking.