Here's the algorithm (from the wikipedia page) then a proof of the time bound:
procedure Shortest-Path-Faster-Algorithm(G, s)
1 for each vertex v ≠ s in V(G)
2 d(v) := ∞
3 d(s) := 0
4 push s into Q
5 while Q is not empty do
6 u := poll Q
7 for each edge (u, v) in E(G) do /* `relax' edge (u, v) */
8 if d(u) + w(u, v) < d(v) then
9 d(v) := d(u) + w(u, v)
10 if v is not in Q then
11 push v into Q
Theorem 1. Given graph $G=(V,E)$, the algorithm runs in time $O(\min_T \text{depth}(T)\cdot|E|)$, where $T$ ranges over the shortest-path trees rooted at $s$, and $\text{depth}(T)$ is the depth of $T$ (the length of the longest path from $s$ to any node in $V$. Hence, the time is $O(|V|\cdot |E|)$.
(Note that same bound $O(\min_T \text{depth}(T)\cdot |E|)$ also holds for Bellman-Ford.)
Proof. We will use the following standard fact about the relaxation operations in the inner loop:
Fact 1. When an edge $(u, v)$ is relaxed (in the inner loop), if $d(u)$ is correct ($d(u)=\text{dist}(s, u)$) before the relaxation, and $(u, v)$ is on any shortest path from $s$, then $d(v)$ is correct ($d(v)=\text{dist}(s, v)$) after the relaxation, and remains correct for the remainder of the execution.
Now consider any execution of the algorithm.
Partition the iterations into contiguous runs, as follows.
The first run contains only the first iteration, when $s$ is first popped off the queue, and the neighbors of $s$ are pushed onto the queue. In general, for $i\ge 2$, the $i$th run starts just after run $i-1$ ends, and consists of those iterations in which the vertices in the queue at the end of run $i-1$ are popped off the queue.
Consider any shortest path $P=(s=v_1, v_2, \ldots,v_\ell)$ from $s$ to some node $v_\ell$. We will argue that the algorithm maintains the following invariant: at the start of each run $i$, the distance labels $d(v_j)$ for $j\le \min(\ell, i)$ are correct (that is, $d(v_j) = \text{dist}(s, v_j)$ for $j\le \min(\ell,i)$). The invariant holds at the start of run $1$ because $v_1=s$ and $d(s)=0$ at the start of run $1$ (by Line 3). Consider the time at the start of any run $i\in[\ell]$. Assume inductively that the invariant holds now. We will argue that it will hold at the start of the next run $i+1$. Let $v_k$ be the first vertex on the path whose distance label is not yet correct (at the start of run $i$). (If there is no such vertex, all labels on the path are correct, and the invariant holds.) So $v_{k-1}$ is correctly labeled, but $v_k$ is not. Because the invariant holds now, we have $k\ge i+1$.
Consider the most recent time (before the start of run $i$) that $v_{k-1}$ was added to the queue. By Fact 1, when $v_{k-1}$ is later removed from the queue (and the algorithm relaxes edge $(v_{k-1}, v_k)$), the distance estimate $d(v_k)$ of $v_k$ will become correct. Since $d(v_k)$ is not yet correct, it must be that $v_{k-1}$ is still in the queue (at the start of run $i$). By Fact 1, when $v_{k-1}$ is popped from the queue in run $i$, the distance label of vertex $v_k$ will become correct and at the start of the next run $i+1$, the labels on vertices $v_1, v_2, \ldots, v_k$ will be correct. Because $k\ge i+1$, the invariant will hold at the start of run $i+1$. Inductively, all distance labels along the path $P$ will be correct by the start of run $\ell=|P|$.
This holds for all shortest paths $P$ from $s$, so, for any shortest-path tree $T$ rooted at $s$, by the start of run $\text{depth}(T)$, the distance labels of all vertices will be correct, so the algorithm will have at most $\text{depth}(T)$ runs.
In each run, each vertex $u$ is popped from the queue at most once, just because all vertices popped from the queue in a given run were in the queue at the start of the run (and the queue never holds two copies of the same vertex). By this and the previous paragraph, each vertex $u$ is popped from the queue at most $\text{depth}(T)$ times.
It follows that each edge $(u, v)\in E$ is considered in Line 7 at most $\text{depth}(T)$ times. It follows that the total number of iterations of the inner loop is at most $|E|\cdot \text{depth}(T)$. This implies the theorem. $~~~\Box$.