Executing the following code (using Dapper) results in a connection with the BusyTimeout still being the default of 0:

using (var connection = new SQLiteConnection("pathToMyDb...")
		        {
			        connection.BusyTimeout = 5000;
			        connection.Open();
			        var result = connection.QueryFirstOrDefault("PRAGMA busy_timeout;");
		        }

I would expect the parameter to actually be used when opening the connection, based on its comment:

the default busy timeout to use with the SQLite core library.  This is only used when
a connection.

Looking at the source code for the Connection class, it is the Open() method which is resetting the BusyTimeout to 0. In the Open() method, it appears that the property's backing variable is set to an expected connection string parameter. If the connection string doesn't have the parameter for BusyTimeout it is reset to 0. Then, it checks to see if the parameter is not zero when determining whether or not to execute the PRAGMA for setting the BusyTimeout. Any value set via the property is overwritten.