Conway's Game of Points! Rest in peace, John Horton Conway
There are a ton of different Game of Life interpreters out there! A ton!
Currently for you, getting an interpreter is just a dozen types and a couple of clicks away.
But wait, do you notice a common thing in the interpreters? Every interpreter is graphical, i.e there are only images and no ASCII text!
The Problem
Fun fact: I was in the middle of creating a 2DF interpreter in my favourite practical programming language while writing this question. 2DF has a command that performs a step of Game of Life on its memory field. I needed to implement that command in my code. I have not done it yet, so this question is technically an actual question rather than a challenge.
I have a list of some points or coordinates on a Cartesian plane. Each point has an X and a Y value. This is your input! Input can be formated in anyway (you can use any type of formatting, so specify your format in your answers).
Example input format:
[[0, 0], [1, 0], [2, 0], [2, 1], [1, 2]]

This is a representation of a period of Glider (The Hacker Logo). Draw the points on a grid, and you will see a shape that resembles this:

What I want for output is the same list, but modified! These are the modification steps.

A new point is added if it has exactly three existing neighbours.
An existing point is removed if it has more than three or less than two existing neighbours.

What is a neighbour?
A neighbour of a point X is defined as a point adjacent to X either horizontally, vertically, or diagonaly. The neighbours of point \$(2, 3)\$ are:

\$(1, 3)\$
\$(1, 2)\$
\$(2, 2)\$
\$(3, 2)\$
\$(3, 3)\$
\$(3, 4)\$
\$(2, 4)\$
\$(1, 4)\$

In this case, the output should be similar to this:
[[1, 0], [2, 0], [2, 1], [0, 1], [1, -1]]

Task
Write a program or implement a function that takes a list of points, and prints or returns a list of points that displays the modified list according to the above modification rules (The order of the output list does not matter).
Oh, and be sure to make the code as short as possible! (code-golf)
P.S It would be great if you included an explanation of your program in your answer!
Some Example Test Cases
Example STDIN                                  Example STDOUT
[[0, 0]]                           =&gt;          []
[[0, 0], [0, 1]]                   =&gt;          []
[[0, 0], [0, 1], [1, 0]]           =&gt;          [[0, 0], [0, 1], [1, 0], [1, 1]]
[[0, 0], [0, 1], [1, 0], [1, 1]]   =&gt;          [[0, 0], [0, 1], [1, 0], [1, 1]]
[[0, 0], [0, 1], [0, -1]]          =&gt;          [[0, 0], [1, 0], [-1, 0]]
[[1, 0], [1, 1], [1, 2]]           =&gt;          [[2, 1], [1, 1], [0, 1]]

Good Luck! :)
APL (Dyalog Extended), 34 32 bytes (SBCS)

Anonymous tacit prefix function. Requires ⎕IO←0 (zero-based indexing).
⌊/{⍺-1-⍸⌂life 0,∘⌽∘⍉⍣4⍸⍣¯1∧⍵-⍺}⊢

Try it online!
⌊/{…}⊢ call the following anonymous lambda with the smallest existing x and y coordinates as left argument (⍺) and the full list as right argument (⍵):
 ⍵-⍺ subtract smallest point from all points (scales so every number is non-negative)
 ∧ sort ascending
 ⍸⍣¯1 generate a Boolean matrix with 1s in those positions (lit. inverse of &quot;ɩndices of 1s&quot;)
 0…⍣4 repeat four times with zero as left argument:
  …∘⍉ transpose, then
   …∘⌽ mirror, then (this constitutes a 90° clockwise turn)
    …, concatenate zeros to the left edge
 ⌂life compute the next Game of Life generation
 ⍸ ɩndices of 1s
 1- subtract those from 1
 ⍺- subtract those from the offset of the lowest x and y coordinates