Like Sander Huisman said, it is hard to say much without some code to look at. In any case, I can wildly speculate about some of these. (Note that I am answering these out of order.)
3: The functions here that start with "N" are functions that will try to evaluate numerically. For example, Minimize can minimize a symbolic expression.
In[]:= Minimize[(x + y)^2, x]
Out[]= {0, {x -> -y}}
NMinimize on the other hand needs an expression that it can minimize numerically, so this particular example would not work with (because y is not defined). Unlike Minimize though, which will automatically try to to minimize numerically if it can't symbolically, NMinimize just tries to do it numerically and so gives you some more options to specify how you want it to sample and so on (if you need to specify things like that). That is the difference between all of these functions and there "N" equivalents (that is, NMinimize is to Minimize as NArgMin is to ArgMin, etc).
The only other difference between the functions you named are the way they structure input and output. Minimize will return the same information as ArgMin, but ArgMin doesn't bother to return the minimal value like Minimize does. The difference is just for convenience.
1 and 2: If the difference is just convenience, why do they sometimes get different answers? If they can run symbolically, they should get exactly the same answer. However, they might be running numerically. Depending on the method it uses, these processes can be non-deterministic. If it chooses Method -> "MonteCarlo" for example, depending on the points it samples it might get a different answer.