Batches can be submitted in two ways to SQL Server. When you run a batch of one or more queries from SSMS, that will always result in an SQL:BatchCompleted. That is, in this case the full batch is sent as text.
But a call to a store procedure can also be done as a remote procedure call, RPC. An application sends the name of the stored procedure and the parameters in binary format. The procedure can be sp_executesql, which is used for a parameterised statement.
The distinction between the two is not that important, and when profiling I typically always include both events. An application is likely to mix both, as not all statements are parameterised.
The two StmtCompleted give you individual statements within the procedure or batch submitted. I think that SP:StmtCompleted is when the statement is inside an SP, and SQL:StmtCompleted is when it is in an ad-hoc batch. Again, the difference is not that important, and trace both.